[Python] 複数ファイルをzip圧縮する方法

Pythonでは、複数のファイルをzip形式で圧縮するために、標準ライブラリのzipfileモジュールを使用します。

このモジュールを使うことで、ファイルを圧縮したり、圧縮ファイルを解凍したりすることができます。

具体的には、zipfile.ZipFileクラスを利用し、writeメソッドを用いて複数のファイルを追加することで、zipファイルを作成します。

また、withステートメントを使うことで、ファイルのクローズを自動化し、コードをより安全に保つことができます。

この記事でわかること
  • 複数ファイルをzip圧縮する手順
  • 特定のディレクトリ内のファイルを圧縮する実践例
  • パスワード付きの圧縮ファイルの作成方法
  • 圧縮ファイルの解凍方法とエラーハンドリング
  • 圧縮ファイルのサイズ確認方法

目次から探す

複数ファイルをzip圧縮する手順

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

Pythonでファイルをzip圧縮するためには、標準ライブラリのzipfileを使用します。

以下のようにインポートします。

import zipfile
import os

圧縮するファイルのリスト作成

圧縮したいファイルのリストを作成します。

ここでは、特定のディレクトリ内のファイルを対象にします。

# 圧縮対象のディレクトリ
directory = '圧縮対象のディレクトリパス'
# 圧縮するファイルのリストを作成
file_list = [os.path.join(directory, file) for file in os.listdir(directory) if file.endswith('.txt')]

zipファイルの作成とファイルの追加

次に、zipファイルを作成し、リストに含まれるファイルを追加します。

# zipファイルの作成
zip_file_name = '圧縮ファイル名.zip'
with zipfile.ZipFile(zip_file_name, 'w') as zip_file:
    for file in file_list:
        zip_file.write(file, os.path.basename(file))

圧縮ファイルの保存

上記のコードを実行すると、指定した名前のzipファイルが作成され、指定したファイルが圧縮されます。

これで、複数のファイルをzip圧縮する手順は完了です。

# 実行例
# 圧縮対象のディレクトリにある全ての.txtファイルを圧縮する

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

実践例:特定のディレクトリ内のファイルを圧縮

ディレクトリ内のファイル一覧取得

特定のディレクトリ内にあるファイルの一覧を取得するためには、osモジュールを使用します。

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

import os
# 圧縮対象のディレクトリ
directory = '圧縮対象のディレクトリパス'
# ディレクトリ内のファイル一覧を取得
file_list = os.listdir(directory)
print(file_list)

このコードを実行すると、指定したディレクトリ内のファイル名がリストとして表示されます。

ファイルのフィルタリング

次に、特定の条件に基づいてファイルをフィルタリングします。

例えば、.txtファイルのみを対象にする場合、以下のようにします。

# .txtファイルのみをフィルタリング
filtered_files = [file for file in file_list if file.endswith('.txt')]
print(filtered_files)

このコードを実行すると、指定したディレクトリ内の.txtファイルのみがリストとして表示されます。

圧縮処理の実行

フィルタリングしたファイルをzip圧縮する処理を実行します。

以下のコードでは、フィルタリングしたファイルをzipファイルに追加します。

import zipfile
# zipファイルの作成
zip_file_name = '圧縮ファイル名.zip'
with zipfile.ZipFile(zip_file_name, 'w') as zip_file:
    for file in filtered_files:
        zip_file.write(os.path.join(directory, file), file)

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

これで、特定のディレクトリ内のファイルを圧縮する実践例は完了です。

応用例

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

Pythonの標準ライブラリzipfileでは、直接的にパスワードを設定する機能は提供されていませんが、pyzipperという外部ライブラリを使用することで、パスワード付きのzipファイルを作成できます。

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

pip install pyzipper

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

import pyzipper
# 圧縮対象のファイル
file_to_zip = '圧縮対象のファイル.txt'
zip_file_name = '圧縮ファイル名.zip'
password = 'your_password'
# パスワード付きzipファイルの作成
with pyzipper.AESZipFile(zip_file_name, 'w', compression=pyzipper.ZIP_DEFLATED) as zip_file:
    zip_file.setpassword(password.encode('utf-8'))
    zip_file.write(file_to_zip, arcname=file_to_zip)

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

圧縮ファイルの解凍方法

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

以下のコードでは、パスワード付きのzipファイルを解凍する方法を示します。

import pyzipper
# 解凍するzipファイルとパスワード
zip_file_name = '圧縮ファイル名.zip'
password = 'your_password'
# zipファイルの解凍
with pyzipper.AESZipFile(zip_file_name) as zip_file:
    zip_file.setpassword(password.encode('utf-8'))
    zip_file.extractall('解凍先のディレクトリパス')

このコードを実行すると、指定したパスワードを使用してzipファイルが解凍され、指定したディレクトリにファイルが保存されます。

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

圧縮ファイルの内容を確認するには、zipfileモジュールを使用して、zipファイル内のファイルリストを取得します。

以下のコードでは、zipファイルの内容を表示します。

import zipfile
# 圧縮ファイル名
zip_file_name = '圧縮ファイル名.zip'
# zipファイルの内容を確認
with zipfile.ZipFile(zip_file_name, 'r') as zip_file:
    file_list = zip_file.namelist()
    print(file_list)

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

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

エラーハンドリング

ファイルが存在しない場合の対処法

ファイルが存在しない場合、FileNotFoundErrorが発生します。

このエラーを適切に処理するためには、try-except文を使用します。

以下のコードでは、指定したファイルが存在しない場合にエラーメッセージを表示します。

import os
# 圧縮対象のファイル
file_to_zip = '圧縮対象のファイル.txt'
try:
    if not os.path.exists(file_to_zip):
        raise FileNotFoundError(f"{file_to_zip} が見つかりません。")
    # 圧縮処理をここに記述
except FileNotFoundError as e:
    print(e)

このコードを実行すると、指定したファイルが存在しない場合にエラーメッセージが表示されます。

圧縮処理中のエラー対策

圧縮処理中にエラーが発生する可能性があります。

例えば、書き込み権限がない場合や、ディスク容量が不足している場合です。

これらのエラーを処理するために、try-except文を使用します。

import zipfile
zip_file_name = '圧縮ファイル名.zip'
try:
    with zipfile.ZipFile(zip_file_name, 'w') as zip_file:
        # 圧縮処理をここに記述
        zip_file.write(file_to_zip)
except (PermissionError, OSError) as e:
    print(f"圧縮処理中にエラーが発生しました: {e}")

このコードを実行すると、圧縮処理中にエラーが発生した場合にエラーメッセージが表示されます。

解凍時のエラー対策

解凍時にもエラーが発生することがあります。

例えば、zipファイルが壊れている場合や、パスワードが間違っている場合です。

これらのエラーを処理するために、try-except文を使用します。

import pyzipper
zip_file_name = '圧縮ファイル名.zip'
password = 'your_password'
try:
    with pyzipper.AESZipFile(zip_file_name) as zip_file:
        zip_file.setpassword(password.encode('utf-8'))
        zip_file.extractall('解凍先のディレクトリパス')
except (RuntimeError, zipfile.BadZipFile) as e:
    print(f"解凍時にエラーが発生しました: {e}")

このコードを実行すると、解凍時にエラーが発生した場合にエラーメッセージが表示されます。

これにより、ユーザーは問題を特定しやすくなります。

よくある質問

zipfileモジュール以外の圧縮方法は?

Pythonでは、zipfileモジュール以外にもいくつかの圧縮方法があります。

例えば、tarfileモジュールを使用してtar.gz形式で圧縮することができます。

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

さらに、gzipモジュールを使ってgzip形式で圧縮することもできます。

圧縮率を上げる方法は?

圧縮率を上げるためには、圧縮アルゴリズムの選択や圧縮レベルの設定が重要です。

zipfileモジュールでは、compresslevelパラメータを指定することで圧縮レベルを調整できます。

例えば、zipfile.ZipFile(zip_file_name, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9)のように設定することで、最大圧縮を行うことができます。

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

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

以下のようにして、zipファイルのサイズを取得できます。

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

このコードを実行すると、指定したzipファイルのサイズがバイト単位で表示されます。

まとめ

この記事では、Pythonを使用して複数のファイルをzip圧縮する方法について詳しく解説しました。

具体的には、圧縮処理の手順やエラーハンドリング、応用例などを紹介しました。

これを機に、Pythonでのファイル操作に挑戦してみてください。

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