使用Python lxml和Iterparse解析大型XML文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python lxml和Iterparse解析大型XML文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1207字,纯文字阅读大概需要2分钟。
内容图文
![使用Python lxml和Iterparse解析大型XML文件](/upload/InfoBanner/zyjiaocheng/696/0bdf13fe2430485bac32c21c5fcbdcbc.jpg)
我正在尝试使用lxml和iterparse方法编写解析器来逐步执行包含许多项的非常大的xml文件.
我的文件格式为:
<item>
<title>Item 1</title>
<desc>Description 1</desc>
<url>
<item>http://www.url1.com</item>
</url>
</item>
<item>
<title>Item 2</title>
<desc>Description 2</desc>
<url>
<item>http://www.url2.com</item>
</url>
</item>
到目前为止我的解决方案是:
from lxml import etree
context = etree.iterparse( MYFILE, tag='item' )
for event, elem in context :
print elem.xpath( 'description/text( )' )
elem.clear( )
while elem.getprevious( ) is not None :
del elem.getparent( )[0]
del context
当我运行它时,我得到类似的东西:
[]
['description1']
[]
['description2']
空白集是因为它还将子项的项标记拉出到url标记,并且它们显然没有用xpath提取的描述字段.我希望逐个解析每个项目,然后根据需要处理子字段.我有点只是学习lxml图书馆,所以我很好奇是否有办法拉出主要项目,如果遇到任何子项目?
解决方法:
无论如何,核心实现都会解析整个xml. etree.iterparse只是生成器样式中的一个视图,它通过标记名称提供简单的过滤(请参阅docstring http://lxml.de/api/lxml.etree.iterparse-class.html).
如果你想要一个复杂的过滤,你应该自己做.
解决方案:注册启动事件:
iterparse(self, source, events=("start", "end",), tag="item")
当你是“item / url / item”时,有一个bool知道你何时在“item”结束.
内容总结
以上是互联网集市为您收集整理的使用Python lxml和Iterparse解析大型XML文件全部内容,希望文章能够帮你解决使用Python lxml和Iterparse解析大型XML文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。