【问题标题】:how to read big XML files in python without memory problem如何在没有内存问题的情况下在 python 中读取大 XML 文件
【发布时间】:2019-05-30 18:24:25
【问题描述】:

我正在尝试读取将近 19 GB 的 XML 文件“Comments.xml”,但它会出现内存错误。我在每个 IDE 中都尝试过,但没有任何效果。我有 4 GB 内存。我也搜索,谷歌搜索但没有找到任何线索:/ 我的代码是

我在每个 IDE 中都尝试过,但没有任何效果。我也搜索,谷歌搜索但没有找到任何线索:/

import xml.etree.ElementTree as ET
tree = ET.ElementTree(file='Comments.xml')
root = tree.getroot()
for rows in root:
    print(rows.attrib)

当我运行 IDE 棒一段时间后,我得到了错误: 第 598 行,解析中 self._root = parser._parse_whole(源) 内存错误

【问题讨论】:

  • 你不能一口气读完,所以你需要一个流式 XML 解析器。
  • 流式传输 xml?我将如何得到它?
  • 我不确定它是否能完全解决你的问题,但你可以试试lxml python 库,它允许迭代解析(所以整个树不需要加载到内存中)。有关示例,请参阅stackoverflow.com/q/324214/5050917 的一些答案。

标签: python pycharm xmldataset


【解决方案1】:

今天早上我也遇到了这个问题,幸好我找到了最好的解决方案: The xmltodict

为避免占用大量内存,您可以使用流模式,示例如下:

def handle_artist(_, artist):
    print(artist['name'])
    return True

xmltodict.parse(GzipFile('discogs_artists.xml.gz'),item_depth=2, item_callback=handle_artist)

【讨论】:

  • 我使用了 xmltodict 但给出了错误“ parser.Parse(xml_input, True) ExpatError: syntax error: line 1, column 0”,我有 import xmltodict def handle_artist(_, artist): print(艺术家['person']) return True xmltodict.parse('activity.xml',item_depth=2, item_callback=handle_artist)
猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 2021-08-03
  • 2021-11-07
  • 2019-08-22
  • 1970-01-01
  • 2017-10-24
  • 2019-04-05
  • 1970-01-01
相关资源
最近更新 更多