gzipで圧縮されているテキストファイルを読み込むときに,いくつか(個人的に)落とし穴があったので,まとめてみました.
バイナリ読み込み
デフォルトのファイル読み込みモードは,バイナリであるため,下記のようなコードだと,各行をバイナリで読み込んでしまいます.
import gzip
with gzip.open("test.txt.gz", "r") as fi:
for line in fi:
print(line)
テキストで読みだすには,ファイルオープン時に,'rt'モードで読みこみましょう.
import gzip
with gzip.open("test.txt.gz", "rt") as fi:
for line in fi:
print(line)
文頭のエンコード宣言を無視
エンコーディングをデフォルトで指定しておいても,無視されてしまうので,ファイルオープン時にエンコーディングを再度指定する必要があります.つまり,最終的には,下記のようなコードでテキストファイルとして読み込めます.
import gzip
with gzip.open("test.txt.gz", "rt", "utf_8") as fi:
for line in fi:
print(line)
蛇足
多分,他の圧縮ファイルでも同様だと思いますが,試してません.