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

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

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

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

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

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

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("フォルダーが選択されていません。")

Pythonの学習進め方

Pythonでできることは多岐に渡ります。

Pythonでできること
  • 機械学習・人工知能
  • データ解析・統計分析
  • ファイル操作・システム管理
  • GUIアプリ開発

Pythonは強力で柔軟なプログラミング言語ですが、常に情報がアップデートされるので、
新しいライブラリやフレームワークを独学で学び続けることは困難です。

Udemyは動画で目的に応じた講座を受講できるのでレベルを合わせて学習できます。
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで独学できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Pythonでデータサイエンスや人工知能、GUIを学びたい人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を5つ紹介します。

ビックセール開催中(10月11日まで)
対象のコースが1500円から(最大95%OFF)

多彩な講座から自分に合った講座を探そう!

最大94%OFF

終了まで

時間

Pythonをインストールから環境設定、基本文法が学習できる。さらに、モジュールの使い方やファイル操作の他に暗号化、並列化、インフラ自動化、キューイングシステム、非同期処理についても学べます。

Pythonの基礎を押さえつつ、人口知能やニューラルネットワーク、機械学習を取り扱う。機械学習ライブラリで文字認識や株価分析などを行う。

データサイエンティストになるために必要なツールについて学ぶことができる。統計分析、NumpyやPandasなどを使ったPythonのプログラミング、機械学習の実装、ディープラーニングの実装を学習できる。

PythonでGUIを作成する方法を取り扱う。Tkinterの発展的な操作まで学習できる。翻訳アプリ、家計簿アプリ、電卓アプリ、音楽再生アプリなど作成して、exeファイル化する。

解説

  • モジュール名

「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ライブラリを使用すると、ファイルの圧縮や解凍が簡単に行えます。

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

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