2012-05-12 127 views
32

从gz-compressed文本文件中使用python读取一行而不完全提取文件很容易吗?我有一个200MB的text.gz文件。当我提取它时,它变成7.4GB。这不是我必须阅读的唯一文件。对于整个过程,我必须读取10个文件。虽然这将是一个连续的工作,但我认为这样做会很聪明,而不会暴露整个信息。我甚至不知道这是可能的。如何使用python来完成?我需要逐行阅读文本文件。python:从压缩的文本文件中读取行

回答

38

你可以在python中使用标准的gzip模块。只需使用:

gzip.open('myfile.gz') 

将文件作为任何其他文件打开并读取其行。

点击此处了解详情:Python gzip module

+0

出于好奇,这是否将整个文件加载到内存?或者它足够聪明,可根据需要加载线路? –

+1

@Sachin_ruk这不会加载它只是打开它的文件。为了实际加载文件中的数据,您需要执行'''f.readline()''一次读取行。或者'f.readlines(N)''其中''N''是你想要读取的行数。 – Tom

22

使用gzip.GzipFile

import gzip 

with gzip.open('input.gz','r') as f: 
    for line in f: 
     print('got line', line) 

注:为python3您对指定文件在'rt'被打开,'r'默认为二进制阅读,或否则使用line.decode(...)

注意:gzip.open(filename, mode)gzip.GzipFile(filename, mode)的别名。 我更喜欢前者,因为它看起来类似于用于打开未压缩文件的with open(...) as f:

+18

对于python3,您必须指定要在'rt'中打开的文件,因为'r'默认为二进制读取。 – kap

+1

或使用'line.decode()' – dmeu