非常大文件的xml解析包

xmlr的Python项目详细描述


xmlr

Build StatusCoverage Status

处理大型XML文件(>;>;10 MB)和使用 ^ python中的{tt1}$模块直接导致巨大的内存开销。大多数 通常,这些大的xml文件是纯数据文件,存储高度 没有内在结构的结构化数据需要存储在xml中。

这个包提供了处理它们的迭代方法 根据 在Converting Between XML and JSON页上指定的方法。xmlr的灵感来自于这些解决方案 在博客文章High-performance XML parsing in Python with lxmlParsing 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)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要64位jdk 1.5 for windows   eclipse运算符+对于参数类型java是未定义的。双,爪哇。双人   未下载文件扩展名为的java文件   java不支持带有POST的媒体类型   从动态创建的多个EditText读取文本时发生java错误   java无法为同一xpath单击多个按钮   如何在Java中动态格式化字符串   java Android Clear Middle活动   多线程Java内存模型volatile和x86   git在Java中通过Jgit忽略文件或文件夹   java“决策无法区分输入的备选方案1、2…”   子类的javajpa继承   java需要弄清楚如何操作mutator来弄清楚一个类,教授说,我对如何操作感到困惑   java如何使用JDBC将数据从文件复制到PostgreSQL?