语言:- Python 2.7.6
文件大小:- 1.5 GB
XML 格式
<myfeed>
<product>
<id>876543</id>
<name>ABC</name>
....
</product>
<product>
<id>876567</id>
<name>DEF</name>
....
</product>
<product>
<id>986543</id>
<name>XYZ</name>
....
</product>
我必须
A)读取所有节点<product>
B)删除其中一些节点(如果<id>
属性的文本在 python set()
C)更新/更改几个节点(如果<id>
属性的文本在 python dict 中
D)追加/写入一些新节点
问题是我的 XML 文件很大(大约 1.5 GB)。我做了一些研究并决定将 lxml 用于所有这些目的。
我正在尝试使用 iterparse() 和 element.clear() 来实现这一点,因为它不会消耗我所有的内存。
for event, element in etree.iterparse(big_xml_file,tag = 'product'):
for child in element:
if child.tag == unique_tag:
if child.text in products_id_hash_set_to_delete: #python set()
#delete this element node
else:
if child.text in products_dict_to_update:
#update this element node
else:
print child.text
element.clear()
注意:- 我想在一次扫描 XML 文件中完成所有这 4 项任务
问题
1)我可以在一次扫描文件中实现所有这些吗?
2)如果是,如何删除和更新我正在处理的元素节点?
3) 我应该改用 tree.xpath() 吗?如果是,它会为 1.5 GB 文件消耗多少内存,或者它的工作方式与 iterparse() 相同
我对python不是很有经验。我来自Java背景。