PythonでディレクトリをZIPに圧縮する方法

Pythonでは、ディレクトリをZIPファイルとして圧縮するために主に2つの方法があります。1つはshutilモジュールを使った簡単な方法、もう1つはzipfileモジュールを使ってより詳細な圧縮操作を行う方法です。

shutil.make_archive()による簡単な圧縮

Python標準ライブラリであるshutilを使うと、ディレクトリ全体を簡単にZIPファイルに圧縮できます。以下のコードで指定ディレクトリを圧縮します。

import shutil
shutil.make_archive('output_filename', 'zip', 'dir_name')

この方法は簡潔で、圧縮だけを行う場合に最適です。

zipfileを使ったカスタマイズ圧縮

zipfileモジュールを使用することで、特定のファイルやサブディレクトリを選んで圧縮するなど、より柔軟な操作が可能です。次のコードは、指定したディレクトリ内のすべてのファイルとフォルダを再帰的に圧縮します。

import zipfile
import os
def zipdir(path, ziph):
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file),
                       os.path.relpath(os.path.join(root, file), path))
with zipfile.ZipFile('output.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipdir('directory_to_zip', zipf)

このコードは、ディレクトリ構造を保ちながらすべてのファイルをZIPファイルに追加します。

まとめ

簡単にディレクトリ全体をZIPファイルにする場合は、shutil.make_archive()が便利です。一方で、圧縮の細かいカスタマイズが必要な場合は、zipfileモジュールを使って詳細な制御を行うことができます。用途に応じて、これらの方法を使い分けましょう。