ZIP圧縮は「ファイルをまとめて軽くし、安全に保管・転送する」ための基本技術
業務自動化では、ZIP圧縮は非常に重要な役割を持ちます。
レポートをまとめてメール送信したり、バックアップを軽量化したり、複数ファイルを一つにまとめて扱いやすくしたりと、用途は幅広いです。
Python では zipfile モジュールを使うことで、初心者でも安全に ZIP 圧縮ができます。
ここでは、基本から実務テンプレートまで、丁寧にかみ砕いて解説します。
ZIP圧縮の基本:zipfile.ZipFile を使う
最小構成:1つのファイルを ZIP にする
import zipfile
with zipfile.ZipFile("backup.zip", "w", compression=zipfile.ZIP_DEFLATED) as z:
z.write("data/report.csv")
Python重要ポイント
"w"は新規作成(既存 ZIP は上書きされる)ZIP_DEFLATEDは一般的な圧縮方式write()にファイルパスを渡すだけで ZIP に追加できる
複数ファイルをまとめて ZIP にする
複数ファイルを一括で圧縮するテンプレート
import zipfile
files = [
"data/report.csv",
"data/summary.txt",
"data/image.png"
]
with zipfile.ZipFile("bundle.zip", "w", zipfile.ZIP_DEFLATED) as z:
for f in files:
z.write(f)
Python深掘りポイント
- ループで
write()を呼ぶだけで複数ファイルをまとめられる - ZIP 内のフォルダ構造を変えたい場合は
arcnameを指定できる
フォルダ丸ごと ZIP 圧縮する
os.walk を使ってフォルダ内のすべてのファイルを追加する
import os
import zipfile
folder = "project"
zip_name = "project.zip"
with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as z:
for current, dirs, files in os.walk(folder):
for name in files:
path = os.path.join(current, name)
arcname = os.path.relpath(path, folder)
z.write(path, arcname)
Python深掘りポイント
os.walk()でサブフォルダも含めて探索arcnameを使うことで ZIP 内のフォルダ構造を保持- バックアップやプロジェクト丸ごとの保存に最適
例題①:日付付き ZIP バックアップを作成する
シナリオ
毎日 data フォルダを ZIP 圧縮してバックアップしたい。
import os
import zipfile
from datetime import date
folder = "data"
today = date.today().strftime("%Y-%m-%d")
zip_name = f"backup_{today}.zip"
with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as z:
for current, dirs, files in os.walk(folder):
for name in files:
path = os.path.join(current, name)
arcname = os.path.relpath(path, folder)
z.write(path, arcname)
print("バックアップ作成:", zip_name)
Python深掘りポイント
- 日付を付けることで「いつのバックアップか」が明確
- ZIP 圧縮により容量削減+ファイルを一つにまとめられる
例題②:特定拡張子だけ ZIP にまとめる
シナリオ
フォルダ内の .csv だけを ZIP にしたい。
import os
import zipfile
folder = "data"
zip_name = "csv_only.zip"
with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as z:
for name in os.listdir(folder):
path = os.path.join(folder, name)
if os.path.isfile(path) and name.lower().endswith(".csv"):
z.write(path, name)
print("CSVのみ圧縮:", zip_name)
Python深掘りポイント
- 拡張子フィルタと ZIP 圧縮を組み合わせると「必要なものだけ」まとめられる
- ETL処理やレポート送信でよく使う
例題③:ZIP 圧縮後に元ファイルを削除する(アーカイブ化)
シナリオ
ログファイルを ZIP にまとめた後、元ファイルを削除して容量を節約したい。
import os
import zipfile
folder = "logs"
zip_name = "logs_archive.zip"
with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as z:
for name in os.listdir(folder):
path = os.path.join(folder, name)
if os.path.isfile(path):
z.write(path, name)
os.remove(path)
print("ログを圧縮して元ファイルを削除しました:", zip_name)
Python深掘りポイント
- ZIP 圧縮後に削除することでディスク容量を節約
- ログ管理の自動化で非常に役立つ
- 削除前に ZIP が正常に作成されたか確認するのが安全
pathlib を使った読みやすい ZIP 圧縮
Path オブジェクトで直感的に書ける
from pathlib import Path
import zipfile
folder = Path("data")
zip_name = "data.zip"
with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as z:
for p in folder.rglob("*"):
if p.is_file():
z.write(p, p.relative_to(folder))
Pythonメリット
rglob("*")でサブフォルダも含めて探索relative_to()で ZIP 内のフォルダ構造を保持- パス操作が読みやすく、ミスが減る
ZIP圧縮を業務で使うときの重要ポイント
- 圧縮方式は
ZIP_DEFLATEDが一般的で扱いやすい - フォルダ丸ごと圧縮する場合は
os.walk()またはpathlib.rglob() - バックアップには日付やタイムスタンプを付けると管理しやすい
- 圧縮後に元ファイルを削除する場合は慎重に扱う
- ZIP 内のフォルダ構造を保持したい場合は
arcnameを使う
ZIP圧縮は、バックアップ・ログ管理・ファイル送信など、業務自動化のあらゆる場面で役立つ強力な技術です。
