[Python] ディレクトリを丸ごとzip圧縮する方法を解説

Pythonでディレクトリを丸ごとzip圧縮するには、標準ライブラリのzipfileモジュールを使用します。

このモジュールを使うことで、ディレクトリ内のすべてのファイルとサブディレクトリを簡単に圧縮できます。

まず、zipfile.ZipFileクラスを使用して新しいZIPファイルを作成し、os.walk関数でディレクトリを再帰的に巡回します。

各ファイルをZipFile.writeメソッドでZIPファイルに追加することで、ディレクトリ全体を圧縮できます。

この記事でわかること
  • ディレクトリをzip圧縮するための基本的な手順
  • パスワード付きのzipファイルを作成する方法
  • 圧縮ファイルを解凍する方法
  • 圧縮ファイルの内容を確認する方法
  • 他の圧縮方法や圧縮率の変更についての情報

目次から探す

ディレクトリを丸ごとzip圧縮する方法

必要なライブラリのインポート

Pythonでディレクトリをzip圧縮するためには、標準ライブラリのzipfileosを使用します。

これらはPythonにデフォルトで含まれているため、特別なインストールは不要です。

import zipfile
import os

ディレクトリのパスを取得する方法

圧縮したいディレクトリのパスを取得するには、osモジュールのpathを使用します。

以下のように、対象のディレクトリのパスを指定します。

directory_path = '圧縮したいディレクトリのパス'

ファイルを再帰的に取得する方法

指定したディレクトリ内の全てのファイルを再帰的に取得するには、os.walk()を使用します。

この関数は、ディレクトリ内の全てのファイルとサブディレクトリをリストアップします。

for root, dirs, files in os.walk(directory_path):
    for file in files:
        file_path = os.path.join(root, file)

zipファイルの作成と書き込み

zipfileモジュールを使用して、zipファイルを作成し、取得したファイルをその中に書き込みます。

以下のコードでは、指定したディレクトリ内の全てのファイルをzipファイルに追加します。

zip_file_path = '圧縮後のファイル名.zip'
with zipfile.ZipFile(zip_file_path, 'w') as zip_file:
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            file_path = os.path.join(root, file)
            zip_file.write(file_path, os.path.relpath(file_path, directory_path))

圧縮処理の実装例

以下は、上記の手順をまとめた完全な実装例です。

このコードを実行することで、指定したディレクトリをzip圧縮することができます。

import zipfile
import os
# 圧縮したいディレクトリのパス
directory_path = '圧縮したいディレクトリのパス'
# 圧縮後のファイル名
zip_file_path = '圧縮後のファイル名.zip'
# zipファイルの作成
with zipfile.ZipFile(zip_file_path, 'w') as zip_file:
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            file_path = os.path.join(root, file)
            zip_file.write(file_path, os.path.relpath(file_path, directory_path))

このコードを実行すると、指定したディレクトリ内の全てのファイルが圧縮後のファイル名.zipという名前のzipファイルに圧縮されます。

応用例

圧縮ファイルにパスワードを設定する方法

Pythonの標準ライブラリには、直接的にzipファイルにパスワードを設定する機能はありませんが、pyzipperという外部ライブラリを使用することで実現できます。

まず、pyzipperをインストールします。

pip install pyzipper

次に、以下のコードを使用して、パスワード付きのzipファイルを作成します。

import pyzipper
import os
# 圧縮したいディレクトリのパス
directory_path = '圧縮したいディレクトリのパス'
# 圧縮後のファイル名
zip_file_path = '圧縮後のファイル名.zip'
# パスワード
password = b'パスワード'
# zipファイルの作成
with pyzipper.AESZipFile(zip_file_path, 'w', compression=pyzipper.ZIP_DEFLATED) as zip_file:
    zip_file.setpassword(password)
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            file_path = os.path.join(root, file)
            zip_file.write(file_path, os.path.relpath(file_path, directory_path))

このコードを実行すると、指定したディレクトリがパスワード付きのzipファイルに圧縮されます。

圧縮ファイルの解凍方法

圧縮ファイルを解凍するには、zipfileモジュールを使用します。

以下のコードは、指定したzipファイルを解凍する方法を示しています。

import zipfile
# 解凍したいzipファイルのパス
zip_file_path = '圧縮後のファイル名.zip'
# 解凍先のディレクトリ
extract_path = '解凍先のディレクトリのパス'
# zipファイルの解凍
with zipfile.ZipFile(zip_file_path, 'r') as zip_file:
    zip_file.extractall(extract_path)

このコードを実行すると、指定したzipファイルが解凍され、指定したディレクトリにファイルが展開されます。

圧縮ファイルの内容を確認する方法

圧縮ファイルの内容を確認するには、zipfileモジュールのnamelist()メソッドを使用します。

以下のコードは、zipファイル内のファイル名をリスト表示する方法を示しています。

import zipfile
# 確認したいzipファイルのパス
zip_file_path = '圧縮後のファイル名.zip'
# zipファイルの内容を確認
with zipfile.ZipFile(zip_file_path, 'r') as zip_file:
    file_list = zip_file.namelist()
    print("圧縮ファイルの内容:")
    for file_name in file_list:
        print(file_name)

このコードを実行すると、指定したzipファイル内に含まれる全てのファイル名が表示されます。

これにより、圧縮ファイルの内容を簡単に確認することができます。

よくある質問

zipfileモジュール以外の圧縮方法はありますか?

はい、Pythonには他にも圧縮方法があります。

例えば、gzipモジュールやtarfileモジュールを使用することで、gzip形式やtar形式での圧縮が可能です。

また、pyzipperを使うことで、パスワード付きのzipファイルを作成することもできます。

圧縮率を変更する方法はありますか?

zipfileモジュールでは、圧縮率を指定することができます。

ZipFileクラスのコンストラクタにcompression引数を指定することで、圧縮方法を変更できます。

例えば、zipfile.ZIP_DEFLATEDを使用すると、デフォルトの圧縮率で圧縮されますが、zipfile.ZIP_BZIP2zipfile.ZIP_LZMAを使用することで、異なる圧縮率を得ることができます。

圧縮ファイルのサイズを確認する方法はありますか?

圧縮ファイルのサイズを確認するには、osモジュールのstat()関数を使用して、ファイルのサイズを取得できます。

以下のように、ファイルのパスを指定してサイズを確認できます。

例:file_size = os.stat(zip_file_path).st_size

まとめ

この記事では、Pythonを使用してディレクトリを丸ごとzip圧縮する方法について詳しく解説しました。

圧縮ファイルの作成、解凍、内容確認の方法に加え、応用例としてパスワード設定や他の圧縮方法についても触れました。

これを機に、Pythonを活用してファイル管理を効率化してみてください。

  • URLをコピーしました!
目次から探す