【Python】zipファイルの操作、解凍・展開や圧縮する方法

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

フォルダー内のファイルをzipファイルにする。

Pythonは、zipファイルを操作、解凍(展開)・圧縮することができます。
Pythonを使って効率的にファイルを管理し、
ディスクスペースを節約するテクニックを身につけることができます。

本記事では、zipファイルの解凍・展開から圧縮まで、基本的な操作方法を詳しく解説します。

本記事は次の人におすすめ
  • 大量のファイルを効率的に管理したい
  • バックアップやデータ転送のためにファイルを圧縮したい
  • Pythonでのファイル操作を学びたい
  • ディスクスペースを有効に使いたい
  • プロジェクトのファイル整理を自動化したい
Udemyで学習する
スポンサーリンク

zipファイルはいつ使う?

zipファイルは、複数のファイルやフォルダーを1つの圧縮ファイルにまとめることができます。
したがって、データの管理がしやすく、利便性が高いです。

zipファイルの用途
  • ファイルのバックアップ
  • 大量のファイルをメールで送信
  • データのアーカイブ
  • ウェブからのファイルダウンロード
  • プロジェクトファイルの整理と管理

これら用途には、ディスクスペースの節約やファイル転送の高速化、データの整合性維持する必要があるので、zipファイル形式は重宝されます。

zipfile(ライブラリ)

zipfileライブラリは、Pythonの標準ライブラリです。
したがって、pipでインストール必要はありません。

ZIPファイルの作成

ファイルやフォルダーを圧縮してZIPファイルを作成します。

import zipfile
import os

def create_zip(zip_name, file_paths):
    with zipfile.ZipFile(zip_name, 'w') as zipf:
        for file in file_paths:
            zipf.write(file, os.path.basename(file))

create_zip('example.zip', ['file1.txt', 'file2.txt', 'folder/file3.txt'])

実行すると、file1、file2、folder内のfile3のテキストがexample.zipで作成されます。

ZIPファイルの解凍

ZIPファイル内のすべてのファイルや特定のファイルを解凍します。

import zipfile
import os

def extract_all(zip_name, extract_to='.'):
    with zipfile.ZipFile(zip_name, 'r') as zipf:
        zipf.extractall(extract_to)

# 使用例
extract_all('example.zip', 'extracted_all')

実行すると、example.zip内のファイルをすべてextracted_allフォルダーに解凍します。

ZIPファイルの追加

既存のZIPファイルに新しいファイルを追加します。

import zipfile
import os

def add_to_zip(zip_name, file_paths):
    with zipfile.ZipFile(zip_name, 'a') as zipf:
        for file in file_paths:
            zipf.write(file, os.path.basename(file))

add_to_zip('example.zip', ['new_file.txt'])

実行すると、example.zipにnew_file.txtを追加します。

フォルダーを選択して全てのzipファイルを展開・解凍する

上記のスクリプトは、example.zipのみを操作していましたが、
このコードは、指定したフォルダー内のすべてのZIPファイルを再帰的に検索し、解凍します。

ソースコード

import os
import zipfile
import tkinter as tk
from tkinter import filedialog

def extract_zip(zip_path, extract_to):
    with zipfile.ZipFile(zip_path, 'r') as zip_ref:
        folder_name = os.path.splitext(os.path.basename(zip_path))[0]
        extract_folder = os.path.join(extract_to, folder_name)
        os.makedirs(extract_folder, exist_ok=True)
        zip_ref.extractall(extract_folder)

def extract_all_zips_in_folder(folder_path):
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith('.zip'):
                file_path = os.path.join(root, file)
                print(f"Extracting {file_path}")
                extract_zip(file_path, root)

def select_folder():
    root = tk.Tk()
    root.withdraw()
    folder_path = filedialog.askdirectory()
    return folder_path

if __name__ == "__main__":
    folder_path = select_folder()
    if folder_path:
        extract_all_zips_in_folder(folder_path)
    else:
        print("フォルダーが選択されていません。")

UdemyでPythonを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。




解説

  • モジュール名

「os」:ファイルやディレクトリの操作に必要。
「zipfile」:ZIPファイルの圧縮・解凍に必要。
「tkinter」:GUIを作成するためのライブラリ。
「filedialog」:GUIを通じてフォルダやファイルを選択するために必要

  • フィールド(メンバ変数)

「folder_name」:ZIPファイル名から拡張子を除いた名前を持つフォルダの名前。
解凍先のフォルダ名として使用される。
「extract_folder」:解凍したファイルを保存するフォルダのパス。
「folder_path」:ユーザーが選択したフォルダのパス。解凍処理の対象となるフォルダ。
「file_path」:解凍するZIPファイルのフルパス。

  • それぞれのクラス(関数・メソッド)

extract_zip関数
ZIPファイルを解凍するための関数。
引数として「zip_path」(ZIPファイルのパス)と「extract_to」(解凍先のディレクトリ)を取ります。
指定されたZIPファイルを「extract_to」ディレクトリ内のZIPファイル名と同じ名前のフォルダに解凍します。

extract_all_zips_in_folder関数
指定されたフォルダ内のすべてのZIPファイルを再帰的に探索し、見つけたZIPファイルを解凍する関数。引数として「folder_path」(対象フォルダのパス)を取ります。
フォルダ内のZIPファイルを見つけ次第、extract_zip関数を呼び出して解凍する。

select_folder関数
ユーザーがフォルダを選択するためのGUIを表示する関数。
ファイルダイアログを使用してフォルダを選択し、そのパスを返します。
選択されたフォルダのパスを返すため、他の関数で使用される。

実演

このスクリプトを実行すると、フォルダー選択ダイアログが表示されます。
解凍したいZIPファイルが含まれているフォルダーを選択すると、
フォルダー内のすべてのZIPファイルが解凍されます。

まとめ

Pythonを使ってzipファイルを操作する方法について学びました。
zipfileライブラリを使用すると、ファイルの圧縮や解凍が簡単に行えます。

ファイルのバックアップや転送、アーカイブ管理など、
多くの場面で役立つこの技術をぜひ活用してください。

Udemyで学習する
タイトルとURLをコピーしました