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