半结构化xml到dict
ssxtd的Python项目详细描述
半结构化xml到dict
SSXTD是与XMLtoDICT相似的XMLRead,但支持半结构化XML,并提供更灵活的环境。 ssxtd使用以下任一项:
- 本机XML包
- lxml包
- defusedxml包
在全局范围内,坚持使用本机xml包。在大多数情况下是最快的。
注意:创建ssxtd是为了解析非常大的文件,因此,默认解析深度为2,解析函数是生成器。
快速启动
pip install ssxtd
from ssxtd import parsers
result = next(parsers.xml_parse(my_file, depth=0))
如果…
…我想解析大文件?
使用:parsers.xml_iterparse(my_file)
注意:默认情况下,它将返回深度2元素。
…我的XML文件混合了标记和文本?
ssxtd将自动将混合标记和文本转换为字符串,并保持正确的顺序。
…我想使用defusedxml来保护我的应用程序?
使用:parsers.dxml_parse(my_file)
或parsers.dxml_iterparse(my_file)
…我想用lxml?
使用:parsers.lxml_parse(my_file)
或parsers.lxml_iterparse(my_file)
注意:它将比xml解析和xml iterparse慢
选项
深度
即使不使用iterparse,也可以调整返回对象的深度级别。
注意:使用iterparse时不能使用depth=0
修剪空间
将为找到的每个值修剪空格。当您有一些难看的xml时,例如:
<root>
<text>we have
some indentation
problems
</text>
</root>
del_empty(默认为true)
如果设置为false,则不会删除空标记
清除命名空间
如果设置为false,则不会删除命名空间
详细
如果设置为true,将显示一个进度条\o/
恢复
如果设置为true,将从格式错误的xml恢复(cf test_malformed_xml.py)
注意:lxml_parse和lxml_iterparse将使用lxml能力,而其他的将使用美化组转换
压缩
ssxtd可以管理zip、gzip、byteio和文件路径
对于zip和gzip,必须将参数“compression”设置为“gz”或“zip”
parsers.xml_parse(my_file, compression="gz"):
您还可以将参数设置为“auto”,然后ssxtd将自动检测扩展名(.xml、.zip或.gz)中的文件类型
注意:ATM在ZIP压缩模式下,只读取位于ZIP文件根目录下的.xml文件
对象处理器
如果在调用解析器时指定参数“object_processor=my_function”,则将为每个对象调用函数
see bin/run_exemple.py
允许在解析过程中执行特殊操作,如直接合并标记
值处理器
如果在调用解析器时指定参数“value_processor=my_function”,则将为找到的每个值调用函数
例如简单的类型转换:
def try_conversion(value):
try:
return int(value)
except (ValueError, TypeError):
pass
try:
return float(value)
except (ValueError, TypeError):
pass
return value
要求
Python
python>;=v3.7.0b1
由于https://github.com/python/cpython/commit/066df4fd454d6ff9be66e80b2a65995b10af174f
您可以使用旧版本的pythons(我测试了3.5版本),但无法读取zip文件
libs
- BS4
- 全面质量管理
运行测试
安装pytest:pip install pytest
在根目录中,运行:pytest
要运行单个文件,请将自己放在根文件夹中,然后运行:python -c "import ssxtd.tests.test_malformed_xml"
解析函数的性能
分析https://ftp.ncbi.nlm.nih.gov/pubmed/baseline/pubmed19n0001.xml.gz
gz文件大小:19mb
提取大小:185mb
程序:i7-7700hq
Function | XML file | GZ file | ZIP file (no compression) |
---|---|---|---|
xml_parse | 32.76501545000065 | 36.07715339999959 | 33.419777400000385 |
xml_iterparse | 37.56028480000168 | 42.16279835000023 | 39.137448499999664 |
lxml_parse | 37.464776250000796 | 38.880011499999455 | 37.046347550000064 |
lxml_iterparse | 47.04024449999997 | 45.959421049999946 | 45.05521540000154 |
dxml_parse | 41.52063830000043 | 40.07632935000038 | 38.88691465000011 |
dxml_iterparse | 45.195273199999065 | 44.895784000000276 | 44.13825424999959 |
有关更多详细信息,请参见ssxtd\benchmarks\results\result.csv