将XML文件解析为Python对象

将XML文件解析为Python对象,第1张

将XML文件解析为Python对象

如果您认为正则表达式比这更简单,那么我心爱的SD Chargers帽子就不适合您使用:

#!/usr/bin/env pythonimport xml.etree.cElementTree as etsxml="""<encspot>  <file>   <Name>some filename.mp3</Name>   <Enprer>Gogo (after 3.0)</Enprer>   <Bitrate>131</Bitrate>  </file>  <file>   <Name>another filename.mp3</Name>   <Enprer>iTunes</Enprer>   <Bitrate>128</Bitrate>    </file></encspot>"""tree=et.fromstring(sxml)for el in tree.findall('file'):    print '-------------------'    for ch in el.getchildren():        print '{:>15}: {:<30}'.format(ch.tag, ch.text)print "nan alternate way:"  el=tree.find('file[2]/Name')  # xpathprint '{:>15}: {:<30}'.format(el.tag, el.text)

输出:

-------------------Name: some filename.mp3          Enprer: Gogo (after 3.0)Bitrate: 131     -------------------Name: another filename.mp3       Enprer: iTunes          Bitrate: 128an alternate way:Name: another filename.mp3

如果您对正则表达式的吸引力不那么强,那么下面的列表理解功能同样令人难以理解,可以创建数据结构

[(ch.tag,ch.text) for e in tree.findall('file') for ch in e.getchildren()]

<file>
以文档顺序创建XML子级的元组列表:

[('Name', 'some filename.mp3'),  ('Enprer', 'Gogo (after 3.0)'),  ('Bitrate', '131'),  ('Name', 'another filename.mp3'),  ('Enprer', 'iTunes'),  ('Bitrate', '128')]

显然,只要多花点时间,再多加一点考虑,就可以使用ElementTree从XML创建所需的任何数据结构。它是Python发行版的一部分。

编辑

高尔夫代码开了!

[{item.tag: item.text for item in ch} for ch in tree.findall('file')] [ {'Bitrate': '131',    'Name': 'some filename.mp3',    'Enprer': 'Gogo (after 3.0)'},   {'Bitrate': '128',    'Name': 'another filename.mp3',    'Enprer': 'iTunes'}]

如果您的XML仅包含该

file
部分,则可以选择您的高尔夫。如果您的XML有其他标签,其他部分,则需要说明孩子所在的部分,并且需要使用
findall

在Effbot.org上有关于ElementTree的教程。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5645997.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存