Pythonでファイル操作に慣れてくると、次に気になってくるのが「zipファイルの中身をどう扱うか?」ということ。
本記事では、Zipファイルを解凍せずに、内部の.txt
ファイルを直接読み込む方法を、初心者の方にもわかりやすく解説します。
今回の例では、青空文庫からダウンロードした 勝海舟の「黙々静観」という作品(ZIPファイル)を使って、テキストの中身を出力する方法を紹介します。
行ったこと
zipファイル内にある「txt」データを解凍せずに読み込んで出力してみました。
使用したzipファイルは青空文庫でダウンロードした勝海舟「黙々静観」になります。
プログラム
import zipfile
import os.path, urllib.request as req
#1---ZIPファイルの読込
zf = zipfile.ZipFile("katsu.zip", 'r')
#2---ZIPファイル内のtxtファイルの読込
fp= zf.open('mokumokuseikan.txt', 'r')
#3---読込んだデータを格納
txt_data = fp.read()
#4---txtがShift_JISなのでデコード
txt = txt_data.decode('shift_jis')
print(txt)
上記がプログラムになります。
それでは解説していきます。
#1---ZIPファイルの読込
zf = zipfile.ZipFile("katsu.zip", 'r')
1の部分では、開きたいzipファイルのpathを指定します。ここでは、実行するプログラムと同じフォルダ内にある前提で、ファイル名だけを指定しています。
#2---ZIPファイル内のtxtファイルの読込
fp= zf.open('mokumokuseikan.txt', 'r')
2の部分では、zipファイル内の読み込みたい「txt」ファイルを指定しています。
#3---読込んだデータを格納
txt_data = fp.read()
3の部分では、read()
メソッドを使って、ファイルの中身をバイナリ形式(bytes型)で一気に読み込みます。
#4---txtがShift_JISなのでデコード
txt = txt_data.decode('shift_jis')
4の部分では、青空文庫のテキストは多くが Shift_JIS
という日本語文字コードで保存されています。そのまま表示しようとすると文字化けするため、decode()
を使って文字列に変換します。
最後に出力しています。
結果

結果としては上記になります。
zipファイルを解凍せずに中身だけチラ見したい時には便利です。
よくあるエラーと対処法
エラー内容 | 原因と解決方法 |
---|---|
KeyError: 'mokumokuseikan.txt' | ファイル名が間違っている/大文字小文字を確認/実際のファイル名を namelist() で確認する |
UnicodeDecodeError | 文字コードが合っていない → 多くの青空文庫ファイルは shift_jis |
FileNotFoundError | zipファイルが見つからない → ファイルパスと拡張子を確認する |
まとめ
やったこと | 説明 |
---|---|
zipfile.ZipFile() | zipファイルを開く |
open() | zip内の特定ファイルを開く |
read() | ファイルの内容をバイナリで読み込む |
decode(‘shift_jis’) | 日本語テキストを文字化けなく扱うための処理 |
最後に
この方法を使えば、Zipファイルをわざわざ解凍しなくても、Pythonだけで中身を確認したり処理したりできます。スクレイピングやデータ分析などに役立つテクニックなので、ぜひ試してみてください!