この記事では、Pythonのglob
モジュールを使ってzipファイルを検索し、zipfile
モジュールを使って解凍する方法をわかりやすく解説します。
さらに、解凍先ディレクトリの指定や特定のファイルのみを解凍する方法、パスワード付きzipファイルの解凍方法についても説明します。
複数のzipファイルを一括で解凍する方法
Pythonを使って複数のzipファイルを一括で解凍する方法について解説します。
特に、glob
モジュールを使ってファイルを検索し、zipfile
モジュールを使って解凍する方法を中心に説明します。
globモジュールを使ったファイル検索
まず、複数のzipファイルを一括で解凍するためには、対象となるzipファイルをすべて見つける必要があります。
ここで役立つのがPythonのglob
モジュールです。
このモジュールを使うことで、特定のパターンに一致するファイルを簡単に検索することができます。
glob.glob関数の使い方
glob
モジュールの中でも特に便利なのがglob.glob関数
です。
この関数を使うことで、指定したパターンに一致するファイルのリストを取得することができます。
以下は基本的な使い方の例です。
import glob
# カレントディレクトリ内のすべてのzipファイルを検索
zip_files = glob.glob('*.zip')
print(zip_files)
このコードを実行すると、カレントディレクトリ内のすべてのzipファイルがリストとして返されます。
ワイルドカードの使い方
glob
モジュールでは、ワイルドカードを使って柔軟にファイルを検索することができます。
例えば、以下のように特定のパターンに一致するファイルを検索することができます。
# サブディレクトリも含めてすべてのzipファイルを検索
zip_files = glob.glob('**/*.zip', recursive=True)
print(zip_files)
このコードでは、カレントディレクトリおよびそのサブディレクトリ内のすべてのzipファイルを検索します。
recursive=True
を指定することで、再帰的に検索を行うことができます。
ループ処理で複数ファイルを解凍
次に、見つけたzipファイルを一括で解凍する方法について説明します。
ここでは、for
ループを使って各zipファイルに対して解凍処理を行います。
forループの使い方
for
ループを使うことで、リスト内の各要素に対して同じ処理を繰り返し行うことができます。
以下は基本的なfor
ループの使い方の例です。
for file in zip_files:
print(file)
このコードを実行すると、zip_files
リスト内の各ファイル名が順番に出力されます。
各zipファイルに対する解凍処理の実装
最後に、各zipファイルに対して解凍処理を行う方法について説明します。
ここでは、zipfile
モジュールを使って解凍処理を行います。
import zipfile
for file in zip_files:
with zipfile.ZipFile(file, 'r') as zip_ref:
zip_ref.extractall('解凍先ディレクトリ')
このコードを実行すると、zip_files
リスト内の各zipファイルが指定したディレクトリに解凍されます。
with文
を使うことで、ファイルのオープンとクローズを自動的に行うことができます。
以上が、Pythonを使って複数のzipファイルを一括で解凍する方法の基本的な手順です。
これを応用することで、さらに柔軟なファイル操作が可能になります。
応用編
解凍先ディレクトリの指定
extractallメソッドの引数で解凍先を指定する方法
zipfile
モジュールのextractallメソッド
を使うと、zipファイルの内容を指定したディレクトリに解凍することができます。
デフォルトでは、zipファイルが存在するディレクトリに解凍されますが、extractallメソッド
の引数に解凍先ディレクトリを指定することで、任意の場所に解凍することができます。
以下は、解凍先ディレクトリを指定する例です。
import zipfile
import glob
import os
# 解凍先ディレクトリを指定
output_dir = 'output_directory'
# 解凍先ディレクトリが存在しない場合は作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 複数のzipファイルを検索
zip_files = glob.glob('*.zip')
# 各zipファイルを解凍
for zip_file in zip_files:
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
zip_ref.extractall(output_dir)
このコードでは、output_directory
というディレクトリにすべてのzipファイルを解凍しています。
os.makedirs
を使って、解凍先ディレクトリが存在しない場合は自動的に作成します。
特定のファイルのみを解凍
extractメソッドの使い方
zipfile
モジュールのextractメソッド
を使うと、zipファイル内の特定のファイルだけを解凍することができます。
extractメソッド
の第一引数に解凍したいファイル名を指定し、第二引数に解凍先ディレクトリを指定します。
以下は、特定のファイルを解凍する例です。
import zipfile
# 解凍するzipファイル
zip_file = 'example.zip'
# 解凍する特定のファイル
file_to_extract = 'specific_file.txt'
# 解凍先ディレクトリ
output_dir = 'output_directory'
# 解凍先ディレクトリが存在しない場合は作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 特定のファイルを解凍
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
zip_ref.extract(file_to_extract, output_dir)
このコードでは、example.zip
というzipファイルからspecific_file.txt
というファイルだけをoutput_directory
に解凍しています。
特定のファイルを選択する方法
複数の特定のファイルを解凍したい場合は、extractメソッド
をループで繰り返し呼び出すことができます。
以下は、複数の特定のファイルを解凍する例です。
import zipfile
# 解凍するzipファイル
zip_file = 'example.zip'
# 解凍する特定のファイルのリスト
files_to_extract = ['file1.txt', 'file2.txt', 'file3.txt']
# 解凍先ディレクトリ
output_dir = 'output_directory'
# 解凍先ディレクトリが存在しない場合は作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 複数の特定のファイルを解凍
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
for file in files_to_extract:
zip_ref.extract(file, output_dir)
このコードでは、example.zip
というzipファイルからfile1.txt
、file2.txt
、file3.txt
というファイルをoutput_directory
に解凍しています。
パスワード付きzipファイルの解凍
zipfile.ZipFileでのパスワード指定方法
パスワード付きのzipファイルを解凍するには、zipfile.ZipFile
のextractall
またはextractメソッド
にパスワードを指定する必要があります。
パスワードはバイト文字列で指定します。
以下は、パスワード付きzipファイルを解凍する例です。
import zipfile
# 解凍するパスワード付きzipファイル
zip_file = 'password_protected.zip'
# パスワード
password = b'secret'
# 解凍先ディレクトリ
output_dir = 'output_directory'
# 解凍先ディレクトリが存在しない場合は作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# パスワード付きzipファイルを解凍
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
zip_ref.extractall(output_dir, pwd=password)
このコードでは、password_protected.zip
というパスワード付きzipファイルをoutput_directory
に解凍しています。
パスワードはb'secret'
として指定しています。
パスワード付きzipファイルの解凍例
以下は、複数のパスワード付きzipファイルを一括で解凍する例です。
import zipfile
import glob
import os
# 解凍先ディレクトリを指定
output_dir = 'output_directory'
# 解凍先ディレクトリが存在しない場合は作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 複数のパスワード付きzipファイルを検索
zip_files = glob.glob('*.zip')
# パスワード
password = b'secret'
# 各パスワード付きzipファイルを解凍
for zip_file in zip_files:
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
zip_ref.extractall(output_dir, pwd=password)
このコードでは、カレントディレクトリ内のすべてのパスワード付きzipファイルをoutput_directory
に解凍しています。
パスワードはすべてのzipファイルに対して同じb'secret'
を使用しています。
以上が、Pythonを使って複数のzipファイルを一括で解凍する方法とその応用編です。
これらの方法を使えば、効率的にzipファイルを管理することができます。