解析大型压缩xml文件,python

时间:2009-12-03 21:23:29

标签: python data-compression bzip

file  = BZ2File(SOME_FILE_PATH)
p = xml.parsers.expat.ParserCreate()
p.Parse(file)

这是试图解析用bz2压缩的xml文件的代码。不幸的是它失败了一条消息:

TypeError: Parse() argument 1 must be string or read-only buffer, not bz2.BZ2File

有没有办法解析压缩的bz2 xml文件?

注意p.Parse(file.read())不是此处的选项。我想解析一个比可用内存大的文件,所以我需要一个流。

3 个答案:

答案 0 :(得分:5)

只需使用p.ParseFile(文件)而不是p.Parse(文件)。

Parse()接受一个字符串,ParseFile()接受一个文件句柄,并根据需要读取数据。

参考:http://docs.python.org/library/pyexpat.html#xml.parsers.expat.xmlparser.ParseFile

答案 1 :(得分:1)

使用file对象上的.read()将整个文件作为字符串读取,然后将其传递给Parse

file  = BZ2File(SOME_FILE_PATH)
p = xml.parsers.expat.ParserCreate()
p.Parse(file.read())

答案 2 :(得分:0)

你能传入一个mmap()'ed文件吗?这应该注意自动分页文件的所需部分,并避免内存溢出。当然,如果expat构建了一个解析树,它可能仍会耗尽内存。

http://docs.python.org/library/mmap.html

  

内存映射文件对象的行为类似于字符串和文件对象。然而,与普通的字符串对象不同,这些是可变的。您可以在大多数需要字符串的地方使用mmap对象;例如,您可以使用re模块搜索内存映射文件。

相关问题