[Tutor] XML Programs

George Fischhof george at fischhof.hu
Mon Apr 16 12:27:38 EDT 2018


Hi,

Maybe you should give a try to xmltodict package

George

leam hall <leamhall at gmail.com> ezt írta (időpont: 2018. ápr. 16., H 15:14):

> Yeah, understood.
>
> Okay, knowing that others are smarter about python, and ElementTree,
> here's some code I was using to parse XML. Took a while to recover
> from.  :)
>
> Leam
>
> #####
>
> import xml.etree.ElementTree as ET
> import os
> import argparse
> import fnmatch
>
> def show_info(file, element):
>   action      = ""
>   net_proto   = ""
>   trans_proto = ""
>   r_port      = ""
>   l_port      = ""
>   direction   = ""
>   name        = ""
>   has_info    = False
>   f_name      = ""
>
>   id        = element.attrib['name']
>   f_name    = os.path.splitext(file)[0]
>
>   for setting in element.iter('Setting'):
>     if setting.attrib['name']  == 'Action':
>       action    = setting.attrib['value']
>       has_info  = True
>     elif setting.attrib['name'] == '+NetworkProtocol#0':
>       net_proto = setting.attrib['value']
>       has_info  = True
>     elif setting.attrib['name'] == '+TransportProtocol#0':
>       trans_proto = setting.attrib['value']
>       has_info    = True
>     elif setting.attrib['name'] == '+RemotePort#0':
>       r_port    = setting.attrib['value']
>       has_info  = True
>     elif setting.attrib['name'] == '+LocalPort#0':
>       l_port    = setting.attrib['value']
>       has_info  = True
>     elif setting.attrib['name'] == 'Direction':
>       direction = setting.attrib['value']
>       has_info  = True
>     elif setting.attrib['name'] == 'Name':
>       name      = setting.attrib['value']
>       has_info  = True
>
>   if has_info:
>     outfile.write("%s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; %s\n" %
> (f_name, id, name, action, net_proto, trans_proto, l_port, r_port,
> direction))
>
>
>
> ## Main
> parser = argparse.ArgumentParser()
> parser.add_argument("-o", "--outfile", default = "new_out.csv",
> help="File to write to.")
> parser.add_argument("-d", "--dir", default = ".", help="Directory of
> the XML files.")
> args = parser.parse_args()
>
> indir   = args.dir
> outfile = open(args.outfile, 'w')
> outfile.write("File ;Rule ID ;Name ;Action ; Network Protocol;
> Transport Protocol; Local Port; Remote Port; Direction\n")
>
> for file in os.listdir(indir):
>   if fnmatch.fnmatch(file, '*.xml'):
>     full_file = indir + "\\" + file
>     tree   = ET.parse(full_file)
>     root   = tree.getroot()
>     for element in root.iter('PolicySettings'):
>       show_info(file, element)
>
> outfile.close()
>
> ####
>
> On Mon, Apr 16, 2018 at 9:07 AM, Glen <glenuk at gmail.com> wrote:
> > I understand, I'd love to use something else but the save game files are
> in
> > XML so I have no choice :'(
> >
> > On 16 April 2018 at 13:54, leam hall <leamhall at gmail.com> wrote:
> >>
> >> On Mon, Apr 16, 2018 at 7:10 AM, Glen <glenuk at gmail.com> wrote:
> >> > Hey guys,
> >> >
> >> > I'm writing a save-game editor for a game I play (just a project to
> >> > learn).
> >> > But I am struggling on how to structure the code, how to store the xml
> >> > data
> >> > in data structure etc,
> >> >
> >> > Can anyone recommend some source I can review that reads and writes
> data
> >> > from an xml file.
> >>
> >> A friend's comment was "life is too short for XML". I like that. Have
> >> you considered JSON? Taking it a step further, MongoDB (JSON) or
> >> SQLite (SQL)? Both are pretty common and standard.
> >>
> >> While Python has its own stuff, like Pickle, that means you can only
> >> use Python. Using something like JSON or SQL means others can use the
> >> data and you get a chace to develop in a shared environment.  :)
> >> _______________________________________________
> >> Tutor maillist  -  Tutor at python.org
> >> To unsubscribe or change subscription options:
> >> https://mail.python.org/mailman/listinfo/tutor
> >
> >
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list