Apacheのアクセスログのような大量のzipファイルの中身を解析したい時などに、いちいち解凍するとディスクが圧迫されます。zipのままに中身にアクセスする方法として、うまくいったやり方をまとめてみました。
やりたいこと
- txtファイルなどをまとめたzipファイルを解凍せずに、中のtxtファイルの内容を読む
- Pythonで行う
結論
import zipfile
zip_file_path = "<zipファイルのパス>"
target_file_path = "<zipファイルの中にある目的のtxtファイル>"
with zipfile.ZipFile(file_path, "r") as zip_ref:
with zip_ref.open(target_file_path, "r") as file:
for line in file:
line_decoded = line.decode("utf-8")
# line_decodedに対してやりたいことを追記する
ZipFile
ライブラリという標準ライブラリを使えば上手くいきます。
zipfile.ZipFile
オブジェクトのopen()
関数は、zipアーカイブ内のファイルを開くための関数です。この関数を使用すると、zipアーカイブ内のファイルを読み取りモードで開くことができます。
あとは、for line in file
みたいなノリで一行ずつ処理するなり好きにすればよいと思います。