この記事では、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)
各部分の詳細説明
- ディレクトリパスの指定
directory_path
には、ZIP化したいフォルダが含まれる親ディレクトリのパスを指定します。Windows環境では、パスの前にr
を付けて「生文字列」として扱うことで、バックスラッシュ(\
)がエスケープ文字として解釈されるのを防ぐことができます。 - フォルダ内のフォルダを取得
os.listdir()
を使用して、指定されたディレクトリ内にあるすべての項目(ファイルやフォルダ)を取得します。その後、os.path.isdir()
を使ってフォルダのみを対象とします。 - ZIPファイルの作成
各フォルダを対象に、同じディレクトリに.zip
拡張子を持つファイルを作成します。 - フォルダ内のファイルをZIPに追加
os.walk()
を使用して、フォルダ内のサブフォルダやファイルを再帰的に取得し、zipf.write()
を用いてそれらをZIPファイルに追加します。ZIPファイル内でのパス(arcname
)は、os.path.relpath()
を使ってフォルダ内の相対パスとして設定します。
使い方
- 上記のコードをコピーして、任意のテキストエディタ(例えば、VSCodeやSublime Textなど)に貼り付けます。
directory_path
にZIP化したいフォルダを含むディレクトリパスを入力します。.py
ファイルとして保存し、Pythonインタプリタで実行します。
実行後、指定したディレクトリ内の各フォルダがそれぞれ個別のZIPファイルとして圧縮されます。
注意点
- フォルダ内に既に同名のZIPファイルが存在する場合は、上書きされますので注意してください。
- 圧縮対象はフォルダのみです。ディレクトリ内のファイル単体は圧縮されません。
まとめ
今回紹介したスクリプトを使えば、指定したディレクトリ内のフォルダを簡単に一括でZIP化することができます。ファイル管理やバックアップの際に非常に便利なツールですので、ぜひ試してみてください
コメント