Pythonでは、標準ライブラリの zipfile
モジュールを使うことで、ZIPファイルを簡単に扱うことができます。本記事では、フォルダ内にある複数のZIPファイルをまとめて解凍する方法をわかりやすく紹介します。
この記事の対象
「zipfile.extractall()」ってなに?
zipfile.extractall(path=None, pwd=None)
「zipfile.extractall()」はPythonの標準モジュールであるzip形式のファイルを展開するためのモジュールになります。
引数 | 説明 |
---|---|
path | 展開先のフォルダを指定(指定しない場合はカレントディレクトリに展開) |
pwd | パスワード付きZIPファイルのパスワードを指定(バイト列で指定) |
ZIPファイルを一括で解凍するプログラム(サンプルコード)
windowsのダウンロードフォルダ内にあるzipファイルを任意のフォルダ内で解凍するプログラムを作成しました。
青空文庫でzipファイルをダウンロードすることが多いので、自動化のために作成しました。
>>>「青空文庫における任意の作家の作品リストのスクレイピング」
プログラム
import glob
import zipfile
import os
# 1. ダウンロードフォルダ内のZIPファイルをすべて取得
zip_files = glob.glob(r'C:\Users\YourName\Downloads\*.zip') # ←ご自身のパスに置き換えてください
# 2. 解凍先のフォルダ(存在しない場合は作成)
output_dir = './aozora'
os.makedirs(output_dir, exist_ok=True)
# 3. ZIPファイルを1つずつ解凍
for zip_path in zip_files:
try:
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(output_dir)
print(f"✅ 解凍成功:{os.path.basename(zip_path)}")
except zipfile.BadZipFile:
print(f"❌ 解凍失敗:{os.path.basename(zip_path)} は無効なZIPファイルです。")
各ステップの解説
ZIPファイルの取得
zip_files = glob.glob(r'C:\Users\YourName\Downloads\*.zip')
glob.glob()
を使うことで、指定フォルダ内の拡張子.zip
を持つすべてのファイルをリストとして取得します。r'パス'
は「Raw文字列」と呼ばれ、バックスラッシュ\
をエスケープしなくても扱えるので便利です。
出力先フォルダの作成
os.makedirs(output_dir, exist_ok=True)
- 解凍したファイルを格納するフォルダを事前に作成します。
exist_ok=True
によって、フォルダが既に存在していてもエラーになりません。
ZIPファイルの解凍
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(output_dir)
ZipFile()
でZIPファイルを読み込み、extractall()
でまとめて解凍します。with
文を使うことで、ファイルを自動的に閉じてくれます。
よくあるエラーとその対処法
エラー名 | 原因 | 対処方法 |
---|---|---|
FileNotFoundError | 指定したZIPファイルやフォルダが存在しない | パスを正しく指定しているか確認してください |
BadZipFile | ZIPファイルが破損している、ZIP形式でない | ダウンロードに失敗した場合など、ファイルを再取得 |
PermissionError | フォルダに書き込み権限がない | 実行するユーザーに書き込み権限があるか確認 |
UnicodeDecodeError | ZIPファイル内のファイル名に日本語が含まれている | 解凍時にファイル名のエンコーディングを確認 |
応用編:サブディレクトリごとに解凍する
もしファイルごとに専用のフォルダに展開したい場合は以下のように記述できます。
for zip_path in zip_files:
folder_name = os.path.splitext(os.path.basename(zip_path))[0]
target_dir = os.path.join(output_dir, folder_name)
os.makedirs(target_dir, exist_ok=True)
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(target_dir)
これで sample.zip
→ ./aozora/sample/
に展開されるようになります。
まとめ
zipfile.ZipFile
とextractall()
を使えば、Pythonで簡単にZIPファイルを解凍できます。glob
モジュールと組み合わせることで、複数ファイルの一括処理が可能です。- スクリプト化しておくと、毎回手作業で解凍する手間が省けて非常に便利です。
関連記事(さらに理解を深めたい方へ)
- 👉 Python初心者がOSモジュールで覚えておきたい使用方法
- 👉 青空文庫における任意の作家の作品リストをスクレイピングする方法
- 👉 「Pandas」を用いた複数のCSVファイルの結合からチャート化まで
おまけ:実行ファイルに変換したい?
このスクリプトを .exe
に変換すれば、Pythonがインストールされていない環境でも解凍ツールとして使えます。気になる方は「PyInstaller」などで変換してみましょう。