【发布时间】:2018-06-06 09:08:36
【问题描述】:
我有一些非常大的 XML 文件(每个大约 100-150 MB)。
我的 XML 中的一个元素是 M(对于成员),它是 HH(家庭)的子元素 -
即- 每个家庭都有一个或多个成员。
我需要做的是获取满足某些条件的所有成员(条件可以改变,并且可以在家庭和成员上 - 例如 - 只是来自高收入家庭的成员(对家庭的限制) ),谁的年龄在 18-49 岁之间(对成员的限制)) - 并在一个相当复杂的函数中进一步处理它们。
这就是我正在做的:
import lxml.etree as ET
all_members=[]
tree=ET.parse(whole_path)
root=tree.getroot()
HH_str='//H' #get all the households
HH=tree.xpath(HH_str)
for H in HH:
'''check if the hh satisfies the condition'''
if(is_valid_hh(H)):
M_str='.//M'
M=H.xpath(M_str)
for m in M:
if(is_valid_member(m)):
all_members.append(m)
for member in all_members:
'''do something complicated'''
问题在于它占用了我所有的内存(我有 32 GB)! 如何更有效地迭代 xml 元素?
任何帮助将不胜感激...
【问题讨论】:
-
@Tai - 我尝试使用
iterparse(),但不知道如何使用。你能帮我吗? -
我可以提供您的数据样本吗?
-
很遗憾,它是保密的。但我以一种相当笼统的形式写了这个问题......
-
@BinyaminEven 匿名化你的数据块,或者用你自己的数据组成一些具有相同结构的类似数据并在这里分享。这样人们就可以迅速解决您的问题。
标签: python xml list xpath generator