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

この記事では、Pythonを使用して複数のzipファイルを一括で解凍する方法と、解凍後のファイルの処理方法について解説します。

初心者の方でもわかりやすく、具体的なサンプルコードと実行結果の例を交えて説明します。

目次から探す

複数のzipファイルを一括で解凍する

複数のzipファイルを一括で解凍する方法について解説します。

Pythonの標準ライブラリであるzipfileモジュールを使用することで、簡単に実現することができます。

解凍対象のzipファイルを指定する

まずは、解凍対象のzipファイルを指定する必要があります。

解凍したいzipファイルのパスを指定することで、そのファイルを解凍することができます。

import zipfile

zip_file_path = "path/to/zipfile.zip"

解凍対象のzipファイルは、事前に存在することを確認してください。

解凍先のディレクトリを指定する

次に、解凍したファイルを保存するディレクトリを指定します。

解凍先のディレクトリを指定することで、解凍したファイルが保存されます。

import zipfile

zip_file_path = "path/to/zipfile.zip"
extract_dir = "path/to/extract/directory"

解凍先のディレクトリは、存在しない場合は自動的に作成されます。

解凍作業の進捗状況を表示する

解凍作業の進捗状況を表示することで、解凍の進行状況を確認することができます。

zipfileモジュールのextractall()メソッドを使用することで、解凍作業を行います。

import zipfile

zip_file_path = "path/to/zipfile.zip"
extract_dir = "path/to/extract/directory"

with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
    zip_ref.extractall(extract_dir)
    print("解凍が完了しました。")

解凍作業が完了すると、解凍が完了しました。というメッセージが表示されます。

解凍後のファイルの保存先を指定する

解凍後のファイルの保存先を指定することで、解凍したファイルを任意のディレクトリに保存することができます。

import zipfile

zip_file_path = "path/to/zipfile.zip"
extract_dir = "path/to/extract/directory"
save_dir = "path/to/save/directory"

with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
    zip_ref.extractall(extract_dir)
    print("解凍が完了しました。")

# 解凍後のファイルを別のディレクトリに移動する
import shutil

shutil.move(extract_dir, save_dir)
print("ファイルを保存しました。")

解凍後のファイルは、shutilモジュールのmove()関数を使用して、別のディレクトリに移動することができます。

解凍時に発生するエラーのハンドリング

解凍時には、ファイルが存在しない、解凍先のディレクトリが存在しないなどのエラーが発生する可能性があります。

これらのエラーをハンドリングすることで、スムーズな解凍作業を行うことができます。

import zipfile

zip_file_path = "path/to/zipfile.zip"
extract_dir = "path/to/extract/directory"

try:
    with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
        zip_ref.extractall(extract_dir)
        print("解凍が完了しました。")
except FileNotFoundError:
    print("指定されたファイルが存在しません。")
except zipfile.BadZipFile:
    print("指定されたファイルはzipファイルではありません。")
except Exception as e:
    print("予期せぬエラーが発生しました:", str(e))

try-except文を使用して、エラーをキャッチし、適切なメッセージを表示することができます。

以上が、Pythonを使用して複数のzipファイルを一括で解凍する方法です。

解凍対象のzipファイルを指定し、解凍先のディレクトリを指定することで、簡単に解凍作業を行うことができます。

また、解凍作業の進捗状況を表示したり、解凍後のファイルの保存先を指定したりすることも可能です。

さらに、解凍時に発生するエラーをハンドリングすることで、スムーズな解凍作業を行うことができます。

解凍後のファイルの処理方法の紹介

解凍後のファイルを取得した後、さまざまな処理を行うことができます。

以下では、解凍後のファイルを別のディレクトリに移動する方法、特定の条件でフィルタリングする方法、そして別の形式に変換する方法について解説します。

解凍後のファイルを別のディレクトリに移動する

解凍後のファイルを別のディレクトリに移動するには、Pythonのshutilモジュールを使用します。

shutilモジュールには、ファイルやディレクトリの移動やコピーなどを行うための便利な関数が用意されています。

以下は、解凍後のファイルを別のディレクトリに移動するためのサンプルコードです。

import shutil
import os

# 解凍後のファイルが保存されているディレクトリ
extracted_dir = '/path/to/extracted/files'

# 移動先のディレクトリ
destination_dir = '/path/to/destination'

# 解凍後のファイルを移動する
for file_name in os.listdir(extracted_dir):
    file_path = os.path.join(extracted_dir, file_name)
    if os.path.isfile(file_path):
        shutil.move(file_path, destination_dir)

上記のコードでは、extracted_dirに解凍後のファイルが保存されているディレクトリのパスを指定し、destination_dirに移動先のディレクトリのパスを指定しています。

os.listdir()関数を使用して、解凍後のファイルを一つずつ取得し、shutil.move()関数を使用して移動先のディレクトリに移動させています。

解凍後のファイルを特定の条件でフィルタリングする

解凍後のファイルを特定の条件でフィルタリングするには、Pythonの条件文や正規表現を使用します。

条件に合致するファイルのみを取得し、処理を行うことができます。

以下は、解凍後のファイルを特定の条件でフィルタリングするためのサンプルコードです。

import os
import re

# 解凍後のファイルが保存されているディレクトリ
extracted_dir = '/path/to/extracted/files'

# フィルタリングする条件
pattern = r'^[0-9]{4}-[0-9]{2}-[0-9]{2}.txt$'

# 解凍後のファイルをフィルタリングする
for file_name in os.listdir(extracted_dir):
    if re.match(pattern, file_name):
        file_path = os.path.join(extracted_dir, file_name)
        # フィルタリングされたファイルに対する処理を記述する

上記のコードでは、extracted_dirに解凍後のファイルが保存されているディレクトリのパスを指定し、patternにフィルタリングする条件を正規表現で指定しています。

os.listdir()関数を使用して、解凍後のファイルを一つずつ取得し、re.match()関数を使用して条件に合致するかどうかを判定しています。

条件に合致するファイルに対して、処理を記述することができます。

解凍後のファイルを別の形式に変換する

解凍後のファイルを別の形式に変換するには、Pythonの適切なライブラリやモジュールを使用します。

具体的な変換方法は、変換したいファイルの形式や目的によって異なります。

以下は、解凍後のテキストファイルをCSVファイルに変換するためのサンプルコードです。

import csv

# 解凍後のテキストファイルのパス
text_file = '/path/to/extracted/file.txt'

# 変換後のCSVファイルのパス
csv_file = '/path/to/converted/file.csv'

# テキストファイルをCSVファイルに変換する
with open(text_file, 'r') as f:
    lines = f.readlines()
    data = [line.strip().split(',') for line in lines]

with open(csv_file, 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(data)

上記のコードでは、text_fileに解凍後のテキストファイルのパスを指定し、csv_fileに変換後のCSVファイルのパスを指定しています。

open()関数を使用してファイルを開き、csv.writer()を使用してCSVファイルにデータを書き込んでいます。

解凍後のファイルの処理方法は、目的や要件によって異なる場合があります。

上記の例は一部の処理方法を紹介したものであり、実際の使用には適切なライブラリやモジュールを選択し、必要な処理を行ってください。

目次から探す