Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ZIP解凍

Python Python
スポンサーリンク

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.zipinbox に展開したい。

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 を扱う

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