Python 如何从大型文件中提取具有给定分隔符标记的XML块?
我有大量(500 MB-2 GB)XML文件,目前我使用Python 如何从大型文件中提取具有给定分隔符标记的XML块?,python,xml,xpath,xml-parsing,Python,Xml,Xpath,Xml Parsing,我有大量(500 MB-2 GB)XML文件,目前我使用iterparse线性处理。一般结构是许多具有相同结构的记录,我只对其中的一小部分感兴趣。我今天的方法是边走边解析,只保留我感兴趣的内容(一旦解析完成)。这是可行的,尽管速度很慢 出于各种原因(主要原因是好奇),我想重写解析以提取符合我的“记录”(一组特定标记)定义的XML块,并检查块(作为字符串)是否包含使记录有趣的特定子字符串。这些块将排队等待进一步处理 所有这些都使用基于DOM的方法,这些方法不适合我的大文件 是否存在一个现有的模块/
iterparse
线性处理。一般结构是许多具有相同结构的记录,我只对其中的一小部分感兴趣。我今天的方法是边走边解析,只保留我感兴趣的内容(一旦解析完成)。这是可行的,尽管速度很慢
出于各种原因(主要原因是好奇),我想重写解析以提取符合我的“记录”(一组特定标记)定义的XML块,并检查块(作为字符串)是否包含使记录有趣的特定子字符串。这些块将排队等待进一步处理
所有这些都使用基于DOM的方法,这些方法不适合我的大文件
是否存在一个现有的模块/方法,它可以获取边界标记并以线性方式吐出由它分隔的XML块,类似于
lxml.etree.parse
中的xpath
方法?如果不知道哪些标准将定义您感兴趣的节点,我就无能为力。但是,无论如何,我可以试着回答部分问题
这将返回RecordTag或OtherTag的所有元素的列表
records = etree.parse(file).xpath(".//*[self::RecordTag or self:OtherTag]")
如果您只关心一种类型的元素,那么这个xpath查询更简单,并且可能比上面的查询提供更好的性能,后者对树中的每个元素执行自轴检查
xpath(".//Record")
如果您对感兴趣的记录有比标记更复杂的条件,那么我需要更多的细节来帮助构建xpath。我向我们展示了文件的一部分和所需的输出。您是否愿意使用某种工具解析该文件,还是希望使用纯python代码解决方案?