我正在处理4GB+大小的XML文件,想知道如何最好地解析它们。现在我遇到了内存问题,正在寻找一种方法来避免将整个文件加载到内存中并成批处理它?在
当前代码正在使用lxml并在重复元素上迭代。名称空间预先清理:
from lxml import etree, objectify
import pandas as pd
file = 'some_huge_file.xml'
if file.lower().endswith('.xml'):
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(mvnFile, parser)
root = tree.getroot()
####
for elem in root.getiterator():
if not hasattr(elem.tag, 'find'): continue # (1)
i = elem.tag.find('}')
if i >= 0:
elem.tag = elem.tag[i + 1:]
objectify.deannotate(root, cleanup_namespaces=True)
####
data = [{
'Element1': tp.findtext('element1'),
'Element2': tp.findtext('element2'),
'Element3': tp.findtext('element3'),
}
for tp in tree.xpath('//mainelement/subelement')]
df = pd.DataFrame(data)
print(df)
此外,我需要对元素的值进行一些拆分,因为它们是空间分隔的。但是,我只需要特定的值,所以我想知道是否可以在解析过程中这样做,而不是在空间上拆分列?在
xml示例:
^{pr2}$
根据您在评论中发布的链接,我提出了以下建议,以便更有效地进行迭代和拆分,效果很好:
相关问题 更多 >
编程相关推荐