Pythonでzip圧縮・解凍する方法を徹底解説!初心者でもわかるzipfileモジュールの使い方
生徒
「パソコンにあるフォルダやファイルをPythonでまとめて圧縮したり、逆に解凍したりすることってできますか?」
先生
「もちろんできますよ。Pythonにはzipfileというモジュールがあって、それを使えばzipファイルを簡単に扱えます。」
生徒
「初心者でも使いこなせますか?操作が難しそうに感じます…」
先生
「大丈夫。順番に丁寧に説明するので、パソコン初心者の方でも安心してください。では、Pythonでzipファイルを扱う基本から見ていきましょう。」
1. zipファイルとは?まずは意味を知ろう
zip(ジップ)ファイルとは、複数のファイルやフォルダを一つにまとめて、データ容量を小さく「圧縮(あっしゅく)」したファイルのことです。ファイル名の末尾に「.zip」という拡張子がついているのが特徴です。
例えば、旅行で撮った100枚の写真を友だちに送る場面を想像してみてください。1枚ずつバラバラに送ると手間がかかり、受け取る方も大変ですよね。そんな時、zip形式にまとめれば「1つの箱(ファイル)」としてスッキリ送ることができ、さらに全体のサイズも軽くなるため、送信時間の短縮にもつながります。
身近な例えでいうと…
「布団圧縮袋」をイメージすると分かりやすいです。かさばる布団を袋に入れて空気を抜く(圧縮する)と、コンパクトになって収納しやすくなります。使うときは袋を開けて空気を入れる(解凍する)だけで元通りになりますよね。zipファイルもこれと同じ仕組みです。
日常の仕事やプライベートでも、以下のようなシーンでよく使われています:
- 大量の書類を1つにまとめてメールで送る
- Webサイトから複数の資料をまとめてダウンロードする
- パソコンの容量を節約するために、あまり使わないデータを小さく保存する
Pythonを使えば、この「圧縮」や「解凍」という作業を、マウスを使わずにプログラムで自動化できるようになります。次の章から、その具体的な方法を学んでいきましょう。
2. Pythonでzipファイルを扱うには?zipfileモジュールの基本
Pythonでzip形式の圧縮や展開(解凍)を行いたい場合、「zipfile(ジップファイル)」という便利な道具(モジュール)を使用します。このzipfileはPythonに最初から組み込まれている「標準ライブラリ」の一つです。
「標準ライブラリ」とは?
料理で例えると、キッチンに最初から備え付けられている「基本の調味料」のようなものです。追加で買ってくる(インストールする)必要がなく、プログラムの冒頭で「これを使います!」と宣言するだけで、誰でもすぐに使い始めることができます。
プログラミング未経験の方でも、まずは以下のたった1行を書くだけで、複雑な圧縮処理の準備が整います。難しい設定は一切不要です。
import zipfile # zipファイルを扱うための機能を読み込む
このimport zipfileという一文を書くことで、Pythonが「あ、今はzipファイルを操作したいんだな」と理解してくれます。専用のソフトを新しく入れなくても、コード数行で「フォルダを右クリックして圧縮」と同じ作業が自動化できるのが、Pythonの強みです。
それでは、実際にどのようにファイルを圧縮していくのか、最もシンプルで簡単な書き方から具体的に見ていきましょう。
3. Pythonでファイルをzip圧縮する方法:基本の書き方
まずは、特定のファイルを1つだけzip形式に圧縮する、最もシンプルで基本となるプログラムを見ていきましょう。たとえば、「example.txt」というテキストファイルを、「archive.zip」という名前のzipファイルにまとめる場合は、以下のように記述します。
import zipfile
# archive.zipという名前で、新しく書き込み(w)を開始します
with zipfile.ZipFile('archive.zip', 'w') as zipf:
# 圧縮したいファイル名を指定して、zipファイルの中に入れます
zipf.write('example.txt')
この短いコードの中に、大切なポイントが3つあります。
- with構文:
withを使うと、処理が終わったあとに自動でファイルを閉じてくれます。初心者の方が忘れがちな「ファイルを閉じる(close)」という作業をPythonが勝手にやってくれる魔法の言葉です。 - 'w'モード:
'w'は「Write(書き込み)」の頭文字です。新しいzipファイルを作成する際に必ず指定します。 - write()メソッド: この命令が、実際に「箱(zip)の中にファイルを入れる」というアクションを担当しています。
プログラミング未経験の方でも、この3行をコピーしてファイル名を変えるだけで、自分専用の圧縮ツールが作れてしまいます。マウスで右クリックする手間が省ける第一歩ですね。
4. フォルダごとzip圧縮する方法(再帰的に圧縮)
ファイルを1つずつ指定するのは大変ですよね。実務では「特定のフォルダに入っている大量のデータを、階層構造を保ったまま丸ごと圧縮したい」という場面がほとんどです。そんな時は、Pythonのosモジュールを組み合わせて「再帰的(さいきてき)」な圧縮を行います。
「再帰的に圧縮」とは?
フォルダの中に別のフォルダ(サブフォルダ)があっても、その中身まで自動で見つけ出し、すべて漏れなく圧縮することを指します。手作業で1つずつ選ぶ必要はありません。
import zipfile
import os
# 圧縮したいフォルダの名前と、作成するzipファイルの名前を指定
folder_path = 'my_folder'
zip_path = 'my_folder.zip'
with zipfile.ZipFile(zip_path, 'w') as zipf:
# os.walkを使って、フォルダ内の全ファイル・全フォルダを自動でスキャン
for foldername, subfolders, filenames in os.walk(folder_path):
for filename in filenames:
# ファイルのフルパス(住所)を作成
filepath = os.path.join(foldername, filename)
# zipファイルの中に書き込む(arcnameを指定すると余計な階層を防げます)
zipf.write(filepath, arcname=os.path.relpath(filepath, os.path.dirname(folder_path)))
print("フォルダの圧縮が完了しました!")
ここで登場するos.walk()は、フォルダの中を隅々まで探検してくれる非常に強力な関数です。このコードを使えば、どれだけ深い階層にファイルがあっても、Pythonが自動的に見つけ出して一つのzipファイルにまとめてくれます。
初心者の方は、まずこのコードをテンプレートとしてコピーし、folder_pathを自分の圧縮したいフォルダ名に変えるだけで、高度な自動化プログラムを体験できますよ。
5. Pythonでzipファイルを解凍する方法:中身をすべて取り出す
圧縮されたファイルを利用するには、元の形に戻す「解凍(展開)」という作業が必要です。Pythonを使えば、ダブルクリックして解凍ソフトを立ち上げる手間もなく、コード一行で安全かつ高速に中身を取り出すことができます。
解凍のポイント:
圧縮するときは'w'(Write:書き込み)でしたが、解凍するときは'r'(Read:読み込み)を指定します。中身を読み取って外に出す、というイメージですね。
以下のサンプルコードは、初心者の方でもそのままコピーして使える、最も標準的な解凍プログラムです。
import zipfile
# 1. 解凍したいzipファイル名を指定して開きます('r'は読み込みモード)
with zipfile.ZipFile('archive.zip', 'r') as zipf:
# 2. extractallで、指定したフォルダの中にすべて解凍します
# フォルダ名は自由に変えられます。存在しない場合は自動で作られます。
zipf.extractall('output_folder')
print("解凍が正常に完了しました!")
このプログラムの便利な点は、extractall()に指定したフォルダ名(例では'output_folder')が、もしパソコン内に存在しなくても、Pythonが自動で新しいフォルダを作ってくれることです。デスクトップがファイルで散らかる心配がなく、整理整頓もバッチリです。
「特定のファイルだけを取り出したい」という場合は、extract()という別の命令もありますが、まずはこの「全部まとめて解凍する」方法を覚えておけば、ほとんどの実務で困ることはありません。
6. zipfileモジュールのモード一覧と注意点
zipfile.ZipFile()では、以下のようなモードを指定できます。
'r':読み込み専用(解凍に使う)'w':書き込み専用(新規作成、上書きされる)'a':追記(すでにあるzipファイルに追加)
zipファイルが存在する状態で'w'モードを使うと、中身が上書きされて消えてしまうので注意しましょう。
7. zip圧縮・解凍の実行結果例
次のような出力結果が表示されることはありませんが、圧縮や解凍が成功すればフォルダ内にzipファイルや解凍されたファイルが作られているはずです。ターミナルやコマンドプロンプトで確認してみてください。
archive.zip(圧縮ファイル)が作成されました。
output_folder(解凍先フォルダ)が作成されました。
8. よくあるエラーと解決法
パソコン初心者の方でも安心できるよう、よくあるエラーとその対処法を紹介します。
- ファイルが見つからない:
指定したファイル名が間違っている場合に発生します。ファイルの場所と名前を正しく書きましょう。 - PermissionError(パーミッションエラー):
ファイルやフォルダへのアクセス権がないときに出ます。ファイルを開いたままにしていないか確認してください。 - UnicodeEncodeError:
ファイル名に日本語が含まれていると、エラーになることがあります。なるべく半角英数字を使いましょう。
9. 実用例:写真をまとめて圧縮してメール送信
たとえば、スマホで撮った写真をパソコンに移して、10枚を一つのzipファイルにまとめてメールで送るときに便利です。
以下のようなイメージです。
import zipfile
with zipfile.ZipFile('photos.zip', 'w') as zipf:
zipf.write('photo1.jpg')
zipf.write('photo2.jpg')
zipf.write('photo3.jpg')
このように、Pythonを使えば誰でも簡単にzip圧縮や解凍ができます。難しい操作は不要です。
まとめ
Pythonでzip圧縮や解凍を扱う作業は、初心者の方が想像するほど複雑ではなく、むしろ日常的に役立つ便利な操作として多くの場面で活用できます。特に、写真や書類を整理したり、外部へ送ったり、複数のファイルをひとつにまとめて保管したりする場合には、zip形式がとても有効です。Pythonの標準機能であるzipfileモジュールを使えば、追加インストールをする必要もなく、だれでもすぐに実践できるという安心感があります。プログラム初心者の方でも、基本的な文章の読み書きとフォルダ操作さえ理解していれば、zip圧縮や解凍の仕組みを自然と身につけることができます。 さらに、zipfileモジュールが提供する読み込み専用のモード、書き込み専用のモード、追記モードといった操作を理解しておくことで、実際の作業中にどのような状態でファイルを扱っているのかが明確になり、思わぬ上書きやデータ消失を避けることにも繋がります。また、フォルダ全体を再帰的に探索して圧縮する手法を覚えることで、写真や文書が大量に含まれた大きなフォルダも簡単にまとめることができます。こうした一連の手順を理解すると、単純な圧縮だけではなく、複数のフォルダを段階的に整理したり、用途ごとにまとめたzipファイルを自動生成したりといった応用にも活かせます。 とくに、Pythonに慣れていない方がつまずきやすい部分として、ファイルの場所や名前の間違い、アクセス権が不足している状態での操作、日本語名を含むファイルによる文字コードの問題などが挙げられます。しかし、それぞれの問題は一度経験すればすぐに理解できる種類のものであり、慌てず一つずつ確認していけば必ず解決できます。逆に、こうしたトラブルを体験することで、ファイルシステムや文字コード、権限といったコンピュータの基本的な仕組みを自然に学べるという利点もあります。 また、仕事や趣味の場面でも、圧縮作業はさまざまな用途に応用できます。たとえば、撮影した写真を整理してクラウドに保存する、学校行事の資料をまとめて配布する、受け取ったzipファイルを自動で分類して解凍する、といった一連の作業をPythonで自動化できれば、毎日の細かな作業の時間を大幅に短縮できます。このように、日常生活の中で頻繁に行う細かな操作を少しずつプログラムで置き換えていくことで、手作業の負担が減り、より多くの時間を本当に集中したい作業に割くことができます。 今回紹介したサンプルコードは、基本的な使い方を中心に丁寧に整理したものですが、それぞれの処理を応用して、自分自身のフォルダ構成や用途に合わせた便利なスクリプトを作ることもできます。たとえば、特定のファイル形式だけを圧縮する、一定日数以内に更新されたファイルだけをまとめる、といった工夫も可能です。こうした小さな自動化の積み重ねが、長期的には大きな効率化へと繋がります。 以下は、今回の内容を踏まえて少し手を加えたサンプルプログラムです。基本的な構造は同じですが、フォルダ全体を安全に圧縮するための簡単なチェックを追加してあります。
import zipfile
import os
target_folder = 'data_folder'
zip_name = 'data_folder.zip'
if os.path.exists(target_folder):
with zipfile.ZipFile(zip_name, 'w') as zipf:
for folder, subs, files in os.walk(target_folder):
for file in files:
full = os.path.join(folder, file)
zipf.write(full)
else:
print('指定フォルダが存在しません')
このように、Pythonの圧縮や解凍は、慣れてくると「日常の中で自然に使える便利な道具」として感じられるようになります。操作を覚えるにつれて、自分の作業環境をより扱いやすく整えられるだけでなく、効率的なデータ管理の考え方も自然に身についていきます。実際に手を動かしながら理解すれば、プログラムの動きもより明確にイメージできるようになり、少しずつ応用へと進んでいけます。ぜひ今回の内容を活かして、日々のファイル整理や管理をより快適に進めてみてください。
生徒:「今日はPythonでzipを扱う方法がよくわかりました。思っていたより簡単で、実際に動かしてみると理解しやすかったです。」
先生:「よかったですね。最初はむずかしそうに感じても、基本を押さえれば自然に覚えられるものですよ。」
生徒:「フォルダごとの圧縮や解凍もできるので、学校の資料をまとめるときにも使えそうです。」
先生:「その通りです。実際の生活に結びつけて使えると、プログラムの理解も深まりますよ。」
生徒:「ファイル名の間違いや権限エラーも注意ですね。次は、自分のパソコンの写真をまとめる自動化スクリプトを作ってみます。」
先生:「とても良い目標です。今回学んだ基礎を使えば、きっと作れますよ。」