使用带有限RAM的lxml中的iterparse在python中解析非常大的xml文件(18.5 GB)。有办法吗?

时间:2013-05-24 08:01:23

标签: python xml xpath xml-parsing lxml

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

0 个答案:

没有答案