我正在尝试使用有限的 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。:)