Python3でGZipされたログファイルを読み込む

ApachetとかNginxのログは圧縮して保存してケースが多いんですけど、それを読むときにいちいち解凍してるのもめんどくさいのでgzipのまんま読んでみるサンプル。

import gzip


def main():

    _f = gzip.open('/path/to/logfile.gz', 'rb')
    _line = _f.readline()

    while _line:
        _text = _line.decode('utf-8')
        print(_text)
        _line = _f.readline()

    _f.close()


if __name__ = '__main__':
    main()

ファイルを読み込むだけだと文字列はなくてバイト配列なのでそれをデコードしてます。テキストファイルを読み込む時となんら変わりはないのですが、デコードが必要なのでそれを忘れるとあれ?ってなってしまうので要注意。

最初.split(‘\t’)ができなくてあれ?ってなりました。

Python3.4で動かしたコードですけど、2.7でも動くはずです。

2015.01.28 追記

    _f = gzip.open('/path/to/logfile.gz', 'rt')
    _line = _f.readline()

    while _line:
        print(_line)
        _line = _f.readline()

ファイル開くときにテキストモードで開けばもっとスマートです。@yosida95 に教えてもらいました。感謝!