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

【Python応用】zipfileを用いた複数のzipファイルを解凍する方法

Python

Pythonでは、標準ライブラリの zipfile モジュールを使うことで、ZIPファイルを簡単に扱うことができます。本記事では、フォルダ内にある複数のZIPファイルをまとめて解凍する方法をわかりやすく紹介します。

この記事の対象

  • PythonでZIPファイルを扱ってみたい方
  • 青空文庫などからZIP形式でデータをダウンロードしている方
  • フォルダ内にある複数のZIPファイルを自動で一括解凍したい
  • zipfile.extractall()の使い方を基本から学びたい方
スポンサーリンク
スポンサーリンク

「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ファイルやフォルダが存在しないパスを正しく指定しているか確認してください
BadZipFileZIPファイルが破損している、ZIP形式でないダウンロードに失敗した場合など、ファイルを再取得
PermissionErrorフォルダに書き込み権限がない実行するユーザーに書き込み権限があるか確認
UnicodeDecodeErrorZIPファイル内のファイル名に日本語が含まれている解凍時にファイル名のエンコーディングを確認

応用編:サブディレクトリごとに解凍する

もしファイルごとに専用のフォルダに展開したい場合は以下のように記述できます。

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.ZipFileextractall() を使えば、Pythonで簡単にZIPファイルを解凍できます。
  • glob モジュールと組み合わせることで、複数ファイルの一括処理が可能です。
  • スクリプト化しておくと、毎回手作業で解凍する手間が省けて非常に便利です。

関連記事(さらに理解を深めたい方へ)

おまけ:実行ファイルに変換したい?

このスクリプトを .exe に変換すれば、Pythonがインストールされていない環境でも解凍ツールとして使えます。気になる方は「PyInstaller」などで変換してみましょう。

>>>「pyinstaller」を用いたプログラムのexe化方法-まとめ-

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