用python不解压的读取bz2文件和gz文件

当一个文档特别大的时候(比如wikidata等知识库的dump),往往会采用bz2或者gz对其进行压缩,方便下载,同时减少存储空间(bz2压缩率更高一些)。

那么,如何不用解压也能读取原来的文档呢?

读取bz2文件

请使用bz2file这个第三方模块!一定不要使用python自带的bz2模块!

因为python官方的bz2模块不能处理multi-stream files,而不少大文件都是用这种方式压缩的。所以,为了避免不必要的麻烦,统一使用bz2file这个第三方模块吧.

用这个模块将bz2文件打开后,可以类似于普通的文本文件一样处理,详细用法见上面链接中的Documentation

样例代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import bz2file
import os

if __name__ == "__main__":
    inpath = os.path.join(".", "data", "wikidata-20151130-all.json.bz2")
    infile = bz2file.open(inpath, "r")
    for i in xrange(3):
        print(infile.readline())

这里,假设我们将wikidata的dump存储在”./data”文件夹下。
首先,我们用bz2file.open打开bz2文件。这里”r”表示读,”w”表示写。
然后,我们读取这个文件的前三行。

读取gz文件

类似于bz2,使用python的gzip这个package即可

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import gzip
import os

if __name__ == "__main__":
    inpath = os.path.join(".", "data", "test.gz")
    infile = gzip.GzipFile(inpath, "r")
    for i in xrange(3):
        print(infile.readline())

这里我们要读取data文件夹下的test.gz文件
通过GzipFile打开,之后通过readline读入即可
更多使用方法请参考gzip官方文档

你可能感兴趣的:(python)