Pythonでzipファイルを解凍する

Python

Pythonでzipファイルを解凍するには?

Pythonではzipファイルを解凍するモジュールがあらかじめ用意されています。本記事では、Pythonでzipファイルを解凍するunzip_file関数を作成して処理する方法を紹介します。

unzip_file関数のサンプルコード

まずは、unzip_file関数のサンプルコードを紹介します。
関数の下にはテスト用のコードも記載していますので参考にしてください。

import os
import zipfile

def unzip_file(zip_path, extract_path=None):
    """
    Zipファイルを解凍する関数(同一ファイル名が存在する場合には上書きされます)

    Args:
        zip_path (str): Zipファイルのパス
        extract_path (str, optional): 解凍先のパス。未指定の場合はZipファイルと同じ場所に解凍する。

    Returns:
        bool: 解凍が成功した場合はTrue、失敗した場合はFalseを返す。
    """
    try:
        if extract_path is None:
            extract_path = os.path.dirname(zip_path)  # 解凍先パスが未指定の場合はZipファイルと同じ場所に解凍する

        with zipfile.ZipFile(zip_path, 'r', allowZip64=True) as zip_ref:
            for file_info in zip_ref.infolist():
                # 日本語ファイル名をデコードしてから解凍
                file_info.filename = file_info.filename.encode('cp437').decode('cp932')
                zip_ref.extract(file_info, extract_path)
        
        return True  # 解凍成功時
    except Exception as e:
        print("Error:", str(e))
        return False  # 解凍失敗時




##############################################################
# 関数のテスト
if __name__ == "__main__":


    # テスト1 フォルダを圧縮したZipファイルを解凍zipファイルの場所に解凍
    zip_file_path = "C:\\Users\\wkusr\\Desktop\\フォルダ.zip"  # 解凍したいZIPファイルのパスを指定

    success = unzip_file(zip_file_path)
    if success:
        print("解凍が成功しました。")
    else:
        print("解凍に失敗しました。")


    # テスト2 フォルダを圧縮したZipファイルを指定の場所に解凍
    zip_file_path = "C:\\Users\\wkusr\\Desktop\\フォルダ.zip"  # 解凍したいZIPファイルのパスを指定
    extract_to_path = "C:\\Users\\wkusr\\Documents\\aaa"   # 解凍先のパスを指定。Noneの場合はZIPファイルと同じ場所に解凍

    success = unzip_file(zip_file_path, extract_to_path)
    if success:
        print("解凍が成功しました。")
    else:
        print("解凍に失敗しました。")


    # テスト3 ファイルを圧縮したZipファイルを解凍zipファイルの場所に解凍
    zip_file_path = "C:\\Users\\wkusr\\Desktop\\ファイル.zip"  # 解凍したいZIPファイルのパスを指定

    success = unzip_file(zip_file_path)
    if success:
        print("解凍が成功しました。")
    else:
        print("解凍に失敗しました。")


    # テスト4 ファイルを圧縮したZipファイルを指定の場所に解凍
    zip_file_path = "C:\\Users\\wkusr\\Desktop\\ファイル.zip"  # 解凍したいZIPファイルのパスを指定
    extract_to_path = "C:\\Users\\wkusr\\Documents\\aaa"   # 解凍先のパスを指定。Noneの場合はZIPファイルと同じ場所に解凍

    success = unzip_file(zip_file_path, extract_to_path)
    if success:
        print("解凍が成功しました。")
    else:
        print("解凍に失敗しました。")

サンプルのzipファイルの中身

今回はサンプルとして2つのzipファイルパターンを用意しています。

パターン1 フォルダを圧縮したzip

このzipファイルはフォルダの中に3つのファイルを圧縮して保存済のファイルです。

パターン2 ファイルのみ圧縮したzip

このzipファイルは3つのファイルを圧縮しただけのzipです。

テスト実行する。

実際にテスト1から4を実行すると次のように解凍されます。

テスト1 フォルダを圧縮したZipファイルを解凍zipファイルの場所に解凍

デスクトップにフォルダごと解凍されます。

テスト2 フォルダを圧縮したZipファイルを指定フォルダへ解凍

指定場所(今回はドキュメントのaaaフォルダに)解凍されます。

テスト3 ファイルを圧縮したZipファイルを解凍zipファイルの場所に解凍

デスクトップにファイルが解凍されます。

テスト4 ファイルを圧縮したZipファイルを指定フォルダへ解凍

指定場所(今回はドキュメントのaaaフォルダに)解凍されます。

最後に

以上がPythonでzipファイルを解凍する出力する方法です。

Pythonではすでに用意されているzipfileモジュールで簡単に解凍することが可能となっています。

コメント

タイトルとURLをコピーしました