Pythonでフォルダ内のフォルダをすべてZIP化する方法

Python

この記事では、Pythonを使って指定したディレクトリ内のすべてのフォルダを個別にZIPファイルに圧縮する方法について解説します。このスクリプトは、Windows環境で動作するように設計されており、指定したディレクトリ内に存在する各フォルダをZIPファイルに圧縮する機能を提供します。

必要なライブラリ

今回使用するライブラリは以下の2つです。

  • os: Pythonの標準ライブラリで、ファイルやディレクトリの操作を行うことができます。
  • zipfile: ZIPファイルの作成や解凍を行うための標準ライブラリです。

これらのライブラリはPythonにデフォルトで含まれているため、別途インストールする必要はありません。

コードの解説

import os
import zipfile

## ディレクトリを指定する
directory_path = r'C:\Users\******'  # ここに対象のディレクトリパスを指定

def zip_folders_in_directory(directory):
    # 指定されたディレクトリ内のすべてのフォルダを取得
    for folder_name in os.listdir(directory):
        folder_path = os.path.join(directory, folder_name)
        # フォルダのみを対象とする
        if os.path.isdir(folder_path):
            # 出力するZIPファイルのパスを作成
            zip_file_path = os.path.join(directory, f"{folder_name}.zip")
            # フォルダをZIPファイルに圧縮
            with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
                # フォルダ内のすべてのファイルを追加
                for root, dirs, files in os.walk(folder_path):
                    for file in files:
                        file_path = os.path.join(root, file)
                        # ZIP内でのファイルのパスを作成
                        arcname = os.path.relpath(file_path, folder_path)
                        zipf.write(file_path, arcname)

# ZIP化実行
zip_folders_in_directory(directory_path)

各部分の詳細説明

  1. ディレクトリパスの指定
    directory_path には、ZIP化したいフォルダが含まれる親ディレクトリのパスを指定します。Windows環境では、パスの前に r を付けて「生文字列」として扱うことで、バックスラッシュ(\)がエスケープ文字として解釈されるのを防ぐことができます。
  2. フォルダ内のフォルダを取得
    os.listdir() を使用して、指定されたディレクトリ内にあるすべての項目(ファイルやフォルダ)を取得します。その後、os.path.isdir() を使ってフォルダのみを対象とします。
  3. ZIPファイルの作成
    各フォルダを対象に、同じディレクトリに .zip 拡張子を持つファイルを作成します。
  4. フォルダ内のファイルをZIPに追加
    os.walk() を使用して、フォルダ内のサブフォルダやファイルを再帰的に取得し、zipf.write() を用いてそれらをZIPファイルに追加します。ZIPファイル内でのパス(arcname)は、os.path.relpath() を使ってフォルダ内の相対パスとして設定します。

使い方

  1. 上記のコードをコピーして、任意のテキストエディタ(例えば、VSCodeやSublime Textなど)に貼り付けます。
  2. directory_path にZIP化したいフォルダを含むディレクトリパスを入力します。
  3. .py ファイルとして保存し、Pythonインタプリタで実行します。

実行後、指定したディレクトリ内の各フォルダがそれぞれ個別のZIPファイルとして圧縮されます。

注意点

  • フォルダ内に既に同名のZIPファイルが存在する場合は、上書きされますので注意してください。
  • 圧縮対象はフォルダのみです。ディレクトリ内のファイル単体は圧縮されません。

まとめ

今回紹介したスクリプトを使えば、指定したディレクトリ内のフォルダを簡単に一括でZIP化することができます。ファイル管理やバックアップの際に非常に便利なツールですので、ぜひ試してみてください

コメント

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