※このページではアフィリエイト広告を利用しています

【Python応用】Zipファイルを解凍せずに「.txt」データを読み込む方法

Python

Pythonでファイル操作に慣れてくると、次に気になってくるのが「zipファイルの中身をどう扱うか?」ということ。

本記事では、Zipファイルを解凍せずに、内部の.txtファイルを直接読み込む方法を、初心者の方にもわかりやすく解説します。

今回の例では、青空文庫からダウンロードした 勝海舟の「黙々静観」という作品(ZIPファイル)を使って、テキストの中身を出力する方法を紹介します。

  • zipfile モジュールを使った Zipファイルの読み込み
  • Zip内のテキストファイルにアクセスする方法
  • Shift_JIS など日本語テキスト特有の文字コードへの対応
  • 解凍せずにデータだけ読みたいときの処理テクニック
スポンサーリンク
スポンサーリンク

行ったこと

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
FileNotFoundErrorzipファイルが見つからない → ファイルパスと拡張子を確認する

まとめ

やったこと説明
zipfile.ZipFile()zipファイルを開く
open()zip内の特定ファイルを開く
read()ファイルの内容をバイナリで読み込む
decode(‘shift_jis’)日本語テキストを文字化けなく扱うための処理

最後に

この方法を使えば、Zipファイルをわざわざ解凍しなくても、Pythonだけで中身を確認したり処理したりできます。スクレイピングやデータ分析などに役立つテクニックなので、ぜひ試してみてください!

タイトルとURLをコピーしました