Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでフォルダを再帰的にZIP圧縮する方法【zipfileモジュール活用】

Pythonでは標準ライブラリの zipfile モジュールを使うことで、フォルダ全体を簡単にZIPアーカイブに圧縮できます。os.walk() を使ってディレクトリツリーを走査し、その中のすべてのファイルを再帰的にアーカイブへ追加していくのが基本的な流れです。

サンプルコード

import os
import zipfile

def zipdir(path, ziph):
    # ziph は zipfile のハンドル
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file))

zipf = zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('./my_folder', zipf)
zipf.close()

コードの解説

上記のコードを実行すると、my_folder 内のすべてのファイルが Zipped_file.zip という名前のファイルに圧縮され、カレントディレクトリに保存されます。

  • os.walk(path): 指定したパス以下のフォルダを再帰的にたどり、各階層の「ルートパス・サブフォルダ一覧・ファイル一覧」を順番に返します。
  • zipfile.ZIP_DEFLATED: 圧縮率の高いDEFLATE形式で圧縮することを指定しています。圧縮なしで保存したい場合は zipfile.ZIP_STORED を使用してください。
  • ziph.write(): 見つかったファイルを1つずつアーカイブに追加します。

with文を使ったより安全な書き方

close() を忘れてしまうミスを防ぐためには、with文を使う方法がおすすめです。

import os
import zipfile

def zipdir(path, ziph):
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file))

with zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipdir('./my_folder', zipf)

このように書くと、処理が終わった時点(またはエラー発生時)で自動的にファイルが閉じられるため、より安全で可読性の高いコードになります。

  1. Pythonで再帰的にディレクトリを作成するには?os.makedirsの使い方を解説

    再帰的にディレクトリを作成する方法 Pythonで、まだ存在しない親ディレクトリも含めてまとめてフォルダを作成したい場合は、標準ライブラリの os.makedirs() を使用します。作成したいパスを引数として渡すだけで、途中階層のディレクトリがすべて自動的に生成されます。 import os os.makedirs(my_folder/another/folder, exists_ok=True) このコードでは、「my_folder」→「another」→「folder」というように、必要なディレクトリが一括で作成されます。 exists_ok=True を指定する理由 引数 exists

  2. Pythonでファイルを削除する方法をわかりやすく解説

    Pythonでファイルを削除する基本の方法 Pythonでは、標準ライブラリのosモジュールを使うことで、単一のファイルや空のフォルダ(ディレクトリ)を簡単に削除できます。外部ライブラリのインストールは不要で、import osと記述するだけですぐに利用できるのが魅力です。 os.remove() でファイルを削除する たとえば、カレントディレクトリにある my_file.txt というファイルを削除したい場合は、次のように記述します。 >>> import os >>> os.remove(my_file.txt) os.remove() の引数には、削