我有两个xml文件,一个包含产品信息,另一个包含产品描述。我在多次重复使用ElementTree.iterparse时遇到了问题,而且到目前为止还没有发现任何证据,即使有可能多次重复使用ElementTree.iterparse。到目前为止,我已经通过将第二个xml的一部分读入一个dict来解决我的问题,这并不是非常有效地将这么多的文本数据保存在内存中,但至少它是快速的。我的问题是,是否可以多次迭代ElementTree.iterparse或扩展ElementTree以允许多次迭代?
阅读产品描述
desc_iter = ElementTree.iterparse(
desc_filename, events=('start',))
row_id = 0
desc_list = {}
for event, elem in desc_iter:
if event == 'start' and elem.tag == 'record':
row_id = elem.attrib['num']
if event == 'start' and elem.tag == 'DESCRIPTION' and elem.text is not None:
desc_list[row_id] = elem.text
elem.clear()使用产品描述和迭代产品数据
data_iter = ElementTree.iterparse(
data_filename, events=('start', 'end'))
result = copy.deepcopy(self.default_result)
result['downloader_id'] = self.downloader_id
for event, elem in data_iter:
if event == 'start' and elem.tag == 'record':
pass
....
if event == 'end' and elem.tag == 'record':
print(result)
print('='*200)
result = copy.deepcopy(self.default_result)
result['downloader_id'] = self.downloader_id
elem.clear()
del data_iter发布于 2019-03-05 16:23:05
iterparse方法返回一个迭代器,根据定义,该迭代器在到达结束时将被关闭。
如果要多次读取数据,则只有两种解决方案:
list或dict中(到目前为止您的解决方案)iterparse。最后,如果每次都要查找特定的信息,则可以使用像Element.find()这样的方法。
https://stackoverflow.com/questions/55007064
复制相似问题