フォルダー内のファイルをzipファイルにする。
Pythonは、zipファイルを操作、解凍(展開)・圧縮することができます。
Pythonを使って効率的にファイルを管理し、
ディスクスペースを節約するテクニックを身につけることができます。
本記事では、zipファイルの解凍・展開から圧縮まで、基本的な操作方法を詳しく解説します。
- 大量のファイルを効率的に管理したい
- バックアップやデータ転送のためにファイルを圧縮したい
- Pythonでのファイル操作を学びたい
- ディスクスペースを有効に使いたい
- プロジェクトのファイル整理を自動化したい
zipファイルはいつ使う?
zipファイルは、複数のファイルやフォルダーを1つの圧縮ファイルにまとめることができます。
したがって、データの管理がしやすく、利便性が高いです。
これら用途には、ディスクスペースの節約やファイル転送の高速化、データの整合性維持する必要があるので、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は、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。
- 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
Pythonをインストールから環境設定、基本文法が学習
さらに暗号化、インフラ自動化、非同期処理についても学べます。
Pythonを基礎から応用まで学びたい人におすすめ
- みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2024年最新版】
機械学習ライブラリで文字認識や株価分析などを行う。
人口知能やニューラルネットワーク、機械学習を学びたい人におすすめ。
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
統計分析、機械学習の実装、ディープラーニングの実装を学習。
データサイエンティストになりたい人におすすめ。
- 0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜
TkinterのGUIを作成から発展的な操作までアプリ実例を示して学習。
アプリ開発したい人におすすめ。
解説
- モジュール名
「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ライブラリを使用すると、ファイルの圧縮や解凍が簡単に行えます。
ファイルのバックアップや転送、アーカイブ管理など、
多くの場面で役立つこの技術をぜひ活用してください。