非常大文件的xml解析包
xmlr的Python项目详细描述
xmlr
处理大型XML文件(>;>;10 MB)和使用 ^ python中的{tt1}$模块直接导致巨大的内存开销。大多数 通常,这些大的xml文件是纯数据文件,存储高度 没有内在结构的结构化数据需要存储在xml中。
这个包提供了处理它们的迭代方法 根据 在Converting Between XML and JSON页上指定的方法。xmlr的灵感来自于这些解决方案 在博客文章High-performance XML parsing in Python with lxml和 Parsing large XML files, serially, in Python, 启用对非常大的文档的解析,而不会出现以下问题 过度记忆。
This package generally provides a one way trip; there is not necessarily a bijectional relation with the XML source after parsing.
安装
pip install xmlr
使用量
要分析整个文档,请使用xmlparse方法:
fromxmlrimportxmlparsedoc=xmlparse('very_large_doc.xml')
迭代器xmliter,产生指定类型的元素 从文档中分析出来的文件也存在:
fromxmlrimportxmliterfordinxmliter('very_large_record.xml','Record'):print(d)
也可以指定所需的解析器。可用的方法有:
- ELEMENTTREE-使用xml.etree.ElementTree作为后端。
- C_ELEMENTTREE-使用xml.etree.cElementTree作为后端。
- LXML_ELEMENTTREE-使用lxml.etree作为后端。要求 安装lxml包。
然后可以这样使用:
fromxmlrimportxmliter,XMLParsingMethodsfordinxmliter('very_large_record.xml','Record',parser=XMLParsingMethods.LXML_ELEMENTTREE):print(d)
现在不执行类型转换。输出值 字典可以有类型dict(子文档),list( 类似文档的数组),str(叶或值)或None (空的XML叶标记)。所有键的类型都是str。
测试
测试使用pytest:
运行$ py.test tests/ =============================test session starts============================== platform linux2 -- Python 2.7.6, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 rootdir: /home/hbldh/Repos/xmlr, inifile: collected 50 items tests/test_iter.py ........................... tests/test_methods.py .. tests/test_parsing.py ..................... ==========================50 passed in 0.50 seconds===========================
测试从W3Schools XML tutorials获取一些xml文档,然后 还使用了该文档的捆绑、精简版本,可在 U.S. copyright renewal records available for download。
V0.3.1(2016-08-16)
- 在PYPI上提供
V0.3.0(2016-05-23)
- 从xmller重命名为xmlr。
- 总体改进。
- 测试覆盖率增加。
- 更多文件。
- 开发状态分类器从alpha增加到beta。
V0.2.0(2016-05-20)
- 修正错误。
- 编写的方法。
- lxml添加了支持。
- 改进了解析器选择。
- 测试覆盖率提高到90%。
v0.1.0(2016-05-17)
- 初始版本