1

我正在尝试使用有限的 RAM(~6 GB)解析大型 XML 数据转储(18.5 GB)。我们只想从每个对象中获取一些标签,并用这些标签制作一个哈希表。我们目前正在使用 iterparse(因为我们无法将整个文件加载到内存中)和 xpath(查找我们想要的标签)。

这可能吗?

这是一个示例

context = etree.iterparse(StringIO(xml))

artistReleases = {}

for action, elem in context:

    artistName = elem.xpath('/releases/release/artists/artist/name')
    releaseName = elem.xpath('/releases/release/title')

i = 0
while i < len(artistName):
    artist = artistName[i].text
    release = releaseName[i].text
    if artist in artistReleases.keys():
        artistReleases[artist].append(release)
    else:
        artistReleases[artist] = release

    i += 1

要运行一个 8mb 的文件,这大约需要 20 分钟。我希望在一个月内完成 18.5 GB。:)

4

0 回答 0