首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重用ElementTree.iterparse

重用ElementTree.iterparse
EN

Stack Overflow用户
提问于 2019-03-05 16:11:42
回答 1查看 137关注 0票数 0

我有两个xml文件,一个包含产品信息,另一个包含产品描述。我在多次重复使用ElementTree.iterparse时遇到了问题,而且到目前为止还没有发现任何证据,即使有可能多次重复使用ElementTree.iterparse。到目前为止,我已经通过将第二个xml的一部分读入一个dict来解决我的问题,这并不是非常有效地将这么多的文本数据保存在内存中,但至少它是快速的。我的问题是,是否可以多次迭代ElementTree.iterparse或扩展ElementTree以允许多次迭代?

阅读产品描述

代码语言:javascript
复制
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()

使用产品描述和迭代产品数据

代码语言:javascript
复制
    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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 16:23:05

iterparse方法返回一个迭代器,根据定义,该迭代器在到达结束时将被关闭。

如果要多次读取数据,则只有两种解决方案:

  1. 将数据存储在listdict中(到目前为止您的解决方案)
  2. 每次再次调用iterparse

最后,如果每次都要查找特定的信息,则可以使用像Element.find()这样的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55007064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档