2012-05-12 9 views
32
から行を読み込む

、それは完全にファイルを解凍せずにパイソンを使用したGZ-圧縮されたテキストファイルから行を読みやすいですか?私は200mbのaroudのtext.gzファイルを持っています。私はそれを抽出すると、7.4ギガバイトになります。これは私が読まなければならない唯一のファイルではありません。プロセス全体については、10個のファイルを読み込む必要があります。これは逐次的な仕事になりますが、私は情報全体を超越することなくそれを行うことは賢明なことだと思います。私はそれが可能であることを知らない。どのようにそれはPythonを使用して行うことができますか?テキストファイルを1行ずつ読む必要があります。のpython:圧縮されたテキストファイル

答えて

12

あなたがgzip.GzipFileを使用してみましたか?引数はopenに似ています。

38

あなたはpythonで標準のgzipモジュールを使用することができます。

gzip.open('myfile.gz') 

このファイルを他のファイルとして開き、その行を読み込むだけです。

ここに詳細情報:gzip.GzipFileを使用してPython gzip module

+0

out of curiosityこれはファイル全体をメモリにロードしますか?それとも、必要に応じて線を読み込むのに十分なスマートなのでしょうか? –

+1

@Sachin_rukこれは、ファイルを開く直前のファイルをロードしません。ファイルから実際にデータを読み込むには、一度に1行ずつ読み込むために '' 'f.readline()' 'を実行する必要があります。または '' f.readlines(N) ''ここで、 '' N''は読みたい行の数です。 – Tom

22

import gzip 

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

注:のpython3のためにあなたがバイナリ読書に'r'デフォルトとして、'rt'にオープンするファイルを指定する必要があり、またはそれ以外の場合はline.decode(...)を使用します。

注:gzip.open(filename, mode)は、gzip.GzipFile(filename, mode)の別名です。 私は前者を好みます。これは、非圧縮ファイルを開くために使用されるwith open(...) as f:に似ています。

+18

python3の場合、 'rt'にはオープンするファイルを指定する必要があります.'r 'はデフォルトでバイナリの読み込みです。 – kap

+1

または 'line.decode()'を使用してください。 – dmeu

関連する問題