2024-10-04 01:31:37 发布
网友
我有一个完整的目录(~103,104),我需要从中提取几个字段的内容。 我已经测试了不同的xml解析器,由于不需要验证内容(代价昂贵),所以我想简单地使用xml.parsers.expat(最快的一个)遍历文件,逐个提取数据。在
谢谢!在
最快的方法是匹配字符串(例如正则表达式),而不是解析XML—这取决于您的XML。在
但最重要的是:与其考虑几个选项,不如实现它们并在一个小范围内确定时间。这将花费大致相同的时间,并将给你真实的数字确实推动你前进。在
编辑:
通常,我建议使用ElementTree的^{},或者为了提高速度,使用它的对应于lxml。还可以尝试使用Processing(2.6内置)来并行化。在
关于iterparse的重要一点是,当元素(子)结构被解析时,就可以得到它们。在
iterparse
import xml.etree.cElementTree as ET xml_it = ET.iterparse("some.xml") event, elem = xml_it.next()
在本例中,event将始终是字符串"end",但您也可以初始化解析器,以便在解析新元素时也告诉您新元素。你不能保证所有的子元素都会在那时被解析,但是属性在那里,如果你只对它感兴趣的话。在
event
"end"
另一点是您可以尽早停止从迭代器读取元素,即在整个文档被处理之前。在
如果文件很大(是吗?),有一个常见的习惯用法可以保持内存使用不变,就像在流式解析器中一样。在
如果您知道XML文件是使用相同的算法生成的,那么完全不进行任何XML解析可能会更有效。E、 如果知道数据在第3、4和5行中,可以逐行读取文件,然后使用正则表达式。在
当然,如果文件不是机器生成的,或者来自不同的生成器,或者生成器随着时间的推移而改变,那么这种方法将失败。然而,我乐观地认为它会更有效。在
是否回收解析器对象在很大程度上无关紧要。将创建更多的对象,因此单个解析器对象实际上并不重要。在
最快的方法是匹配字符串(例如正则表达式),而不是解析XML—这取决于您的XML。在
但最重要的是:与其考虑几个选项,不如实现它们并在一个小范围内确定时间。这将花费大致相同的时间,并将给你真实的数字确实推动你前进。在
编辑:
通常,我建议使用ElementTree的^{} ,或者为了提高速度,使用它的对应于lxml。还可以尝试使用Processing(2.6内置)来并行化。在
关于
iterparse
的重要一点是,当元素(子)结构被解析时,就可以得到它们。在在本例中,
event
将始终是字符串"end"
,但您也可以初始化解析器,以便在解析新元素时也告诉您新元素。你不能保证所有的子元素都会在那时被解析,但是属性在那里,如果你只对它感兴趣的话。在另一点是您可以尽早停止从迭代器读取元素,即在整个文档被处理之前。在
如果文件很大(是吗?),有一个常见的习惯用法可以保持内存使用不变,就像在流式解析器中一样。在
如果您知道XML文件是使用相同的算法生成的,那么完全不进行任何XML解析可能会更有效。E、 如果知道数据在第3、4和5行中,可以逐行读取文件,然后使用正则表达式。在
当然,如果文件不是机器生成的,或者来自不同的生成器,或者生成器随着时间的推移而改变,那么这种方法将失败。然而,我乐观地认为它会更有效。在
是否回收解析器对象在很大程度上无关紧要。将创建更多的对象,因此单个解析器对象实际上并不重要。在
相关问题 更多 >
编程相关推荐