アメリエフの技術ブログ

Amelieff Staff Blog

Pythonでgzipされたテキストファイルをcsvモジュールで読み込む

gzip圧縮されたファイルをPythonで読み込むときには、少し注意が必要です。
例として、手元に偶然あった魔法の言葉が書かれたタブ区切りテキストファイルを使用してみます。

zcat supercalifragilisticexpialidocious.txt.gz
super cali fragilistic expia lidocious!
su percali fragili stic expialidocious!
su per califragilis ticexpia lidocious!

読み込みましょう。

[magic.py]

import gzip
import csv

file = 'supercalifragilisticexpialidocious.txt.gz'
with gzip.open(file, 'r') as f:
reader = csv.reader(f, delimiter='¥t')
for row in reader:
print ''.join(row)

もし、下記のようなエラーが出た場合は、お使いのPythonバージョンがPython2.7未満かと思います。

Traceback (most recent call last):
File "magic.py", line 5, in <module>
with gzip.open(file, 'r') as f:
AttributeError: GzipFile instance has no attribute '__exit__'

Python2.7未満の場合はgzipにコンテキストマネージャーの機能が実装されていませんので、with文では使えません。→ [Pythonドキュメント-gzip]
以下のように書きます。

import gzip
import csv

file = 'supercalifragilisticexpialidocious.txt.gz'
f = gzip.open(file, 'r')
reader = csv.reader(f, delimiter='¥t')
for row in reader:
print ''.join(row)
f.close()

下記の出力が得られるはずです。

supercalifragilisticexpialidocious!
supercalifragilisticexpialidocious!
supercalifragilisticexpialidocious!

大きなファイルを圧縮できたらスッキリ!
supercalifragilisticexpialidocious!