2012-05-12 45 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

相關問題