【Python】複数のzipファイルをまとめて解凍する方法

この記事では、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.txtfile2.txtfile3.txtというファイルをoutput_directoryに解凍しています。

パスワード付きzipファイルの解凍

zipfile.ZipFileでのパスワード指定方法

パスワード付きのzipファイルを解凍するには、zipfile.ZipFileextractallまたは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ファイルを管理することができます。

目次から探す