ZIP解凍は「受け取ったデータを正しく展開し、処理可能な状態に戻す」ための基本操作
業務自動化では、メール添付・外部システム出力・バックアップファイルなど、ZIP形式で受け取るデータは非常に多いです。
Python の zipfile モジュールを使えば、初心者でも安全に ZIP を解凍できます。
ZIP解凍の基本は次の3ステップです。
- ZIPファイルを開く
- 展開先フォルダを指定する
extractall()で一括展開する
ここから、基本 → 応用 → 実務テンプレートの順で丁寧に解説します。
ZIP解凍の基本:ZipFile.extractall()
最小構成:ZIPを丸ごと解凍する
import zipfile
zip_path = "data.zip"
extract_to = "output"
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall(extract_to)
print("解凍完了:", extract_to)
Python重要ポイント
"r"は読み込みモードextractall()は ZIP 内のすべてのファイルを展開- 展開先フォルダが存在しない場合は自動で作られないため、必要なら事前に作成する
展開先フォルダを自動作成する
解凍前にフォルダを作る
import os
import zipfile
zip_path = "data.zip"
extract_to = "output"
os.makedirs(extract_to, exist_ok=True)
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall(extract_to)
Python深掘りポイント
exist_ok=Trueにより、既存フォルダがあってもエラーにならない- 解凍先を毎回クリアしたい場合は、事前に削除する処理を追加できる
ZIP内のファイル一覧を確認してから解凍する
中身を確認してから展開する安全な方法
import zipfile
zip_path = "data.zip"
with zipfile.ZipFile(zip_path, "r") as z:
print("ZIP内のファイル:")
for name in z.namelist():
print(" -", name)
Python深掘りポイント
namelist()で ZIP 内のファイル名一覧を取得- 解凍前に「どんなファイルが入っているか」を確認できる
- 不正な ZIP や想定外のファイル混入を防ぐために有効
特定のファイルだけ解凍する
例:ZIP内の CSV だけ取り出す
import zipfile
import os
zip_path = "data.zip"
extract_to = "output"
os.makedirs(extract_to, exist_ok=True)
with zipfile.ZipFile(zip_path, "r") as z:
for name in z.namelist():
if name.lower().endswith(".csv"):
z.extract(name, extract_to)
print("解凍:", name)
Python深掘りポイント
extract()は「指定したファイルだけ」展開- 拡張子フィルタと組み合わせると必要なファイルだけ取り出せる
- ETL処理やデータ抽出でよく使う
例題①:メール添付ZIPを解凍して処理フォルダに展開する
シナリオ
メールで受け取った report.zip を inbox に展開したい。
import os
import zipfile
zip_path = "report.zip"
extract_to = "inbox"
os.makedirs(extract_to, exist_ok=True)
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall(extract_to)
print("展開完了:", extract_to)
Python深掘りポイント
- 展開先フォルダを固定することで処理フローが安定
- 解凍後にファイル検索 → 加工 → 保存といった流れに繋げやすい
例題②:バックアップZIPを日付フォルダに展開する
シナリオ
backup_2024-03-15.zip を日付フォルダに展開したい。
import os
import zipfile
zip_path = "backup_2024-03-15.zip"
extract_to = "restore/2024-03-15"
os.makedirs(extract_to, exist_ok=True)
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall(extract_to)
print("復元完了:", extract_to)
Python深掘りポイント
- バックアップ名に日付が入っている場合、フォルダ名に流用できる
- 復元作業の履歴が残り、管理しやすい
例題③:ZIP解凍後に元ZIPをアーカイブフォルダへ移動する
シナリオ
解凍後、ZIPファイルを archive に移動して整理したい。
import os
import zipfile
import shutil
zip_path = "data.zip"
extract_to = "output"
archive_dir = "archive"
os.makedirs(extract_to, exist_ok=True)
os.makedirs(archive_dir, exist_ok=True)
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall(extract_to)
shutil.move(zip_path, archive_dir)
print("解凍&アーカイブ完了")
Python深掘りポイント
- 解凍後に ZIP を移動することで「未処理」「処理済み」を明確に分けられる
- 業務フローの自動化で非常に役立つ
pathlib を使った読みやすい ZIP 解凍
Path オブジェクトで直感的に書ける
from pathlib import Path
import zipfile
zip_path = Path("data.zip")
extract_to = Path("output")
extract_to.mkdir(exist_ok=True)
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall(extract_to)
Pythonメリット
/演算子でパス結合できる- Path オブジェクトは読みやすく、ミスが減る
ZIP解凍を安全に行うための重要ポイント
- ZIP内のファイル一覧を確認してから展開すると安全
- 展開先フォルダは事前に作成しておく
- 特定ファイルだけ取り出す場合は
extract()を使う - 解凍後の処理(移動・削除・加工)と組み合わせると業務フローが自動化できる
- 不正な ZIP(パスに
../を含むなど)に注意し、信頼できるソースからの ZIP を扱う
