重复使用 ElementTree.iterparse
Reuse ElementTree.iterparse
我有两个 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
iterparse
方法 return 和 iterator,根据定义,当到达末尾时将关闭。
如果要多次读取数据,只有两种解决方案:
- 将数据存储在
list
或 dict
中(您目前的解决方案)
- 每次都调用
iterparse
一次。
最后,如果你每次都寻找特定的信息,你可以使用像Element.find()
这样的方法
我有两个 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
iterparse
方法 return 和 iterator,根据定义,当到达末尾时将关闭。
如果要多次读取数据,只有两种解决方案:
- 将数据存储在
list
或dict
中(您目前的解决方案) - 每次都调用
iterparse
一次。
最后,如果你每次都寻找特定的信息,你可以使用像Element.find()
这样的方法