[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}")
このコードを実行すると、解凍時にエラーが発生した場合にエラーメッセージが表示されます。
これにより、ユーザーは問題を特定しやすくなります。
よくある質問
まとめ
この記事では、Pythonを使用して複数のファイルをzip圧縮する方法について詳しく解説しました。
具体的には、圧縮処理の手順やエラーハンドリング、応用例などを紹介しました。
これを機に、Pythonでのファイル操作に挑戦してみてください。