Pythonでzip圧縮・解凍する方法を徹底解説!初心者でもわかるzipfileモジュールの使い方
生徒
「パソコンにあるフォルダやファイルをPythonでまとめて圧縮したり、逆に解凍したりすることってできますか?」
先生
「もちろんできますよ。Pythonにはzipfileというモジュールがあって、それを使えばzipファイルを簡単に扱えます。」
生徒
「初心者でも使いこなせますか?操作が難しそうに感じます…」
先生
「大丈夫。順番に丁寧に説明するので、パソコン初心者の方でも安心してください。では、Pythonでzipファイルを扱う基本から見ていきましょう。」
1. zipファイルとは?まずは意味を知ろう
zip(ジップ)ファイルとは、複数のファイルやフォルダを一つにまとめて、サイズを小さく圧縮したファイルのことです。よく「.zip」で終わるファイルを見かけたことがあると思います。例えば、たくさんの写真を友達に送るとき、1枚ずつ送るよりもzipファイルにまとめた方が便利で早いですよね。
このように、zipファイルは「圧縮(あっしゅく)」や「まとめる」目的で使われます。
2. Pythonでzipファイルを扱うには?zipfileモジュールの基本
Pythonには、zipファイルを扱うための「zipfileモジュール」が標準で用意されています。標準(ひょうじゅん)とは、特別な準備やインストールをしなくても最初から使える機能のことです。
まずは簡単なサンプルで、「ファイルを圧縮する」方法を見てみましょう。
3. Pythonでファイルをzip圧縮する方法
以下のコードでは、"example.txt"というファイルを"archive.zip"という名前で圧縮しています。
import zipfile
# 圧縮したいファイルとzipファイルの名前を指定
with zipfile.ZipFile('archive.zip', 'w') as zipf:
zipf.write('example.txt')
write()は、zipファイルの中にファイルを追加する命令です。'w'は「新しく作るモード」です。
4. フォルダごとzip圧縮する方法(再帰的に圧縮)
フォルダの中のすべてのファイルをまとめて圧縮するには、Pythonのosモジュールを組み合わせて使います。
import zipfile
import os
folder_path = 'my_folder'
zip_path = 'my_folder.zip'
with zipfile.ZipFile(zip_path, 'w') as zipf:
for foldername, subfolders, filenames in os.walk(folder_path):
for filename in filenames:
filepath = os.path.join(foldername, filename)
zipf.write(filepath)
os.walk()は、フォルダの中をすべて調べる関数です。これを使えば、サブフォルダ(フォルダの中のフォルダ)も含めてまとめて圧縮できます。
5. Pythonでzipファイルを解凍する方法
今度は、逆にzipファイルを「解凍(かいとう)」する方法を紹介します。解凍とは、zipファイルを元の状態に戻すことです。
import zipfile
with zipfile.ZipFile('archive.zip', 'r') as zipf:
zipf.extractall('output_folder')
extractall()は、zipファイルの中身をすべて取り出してくれます。'output_folder'という名前のフォルダに解凍されます。
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を扱う方法がよくわかりました。思っていたより簡単で、実際に動かしてみると理解しやすかったです。」
先生:「よかったですね。最初はむずかしそうに感じても、基本を押さえれば自然に覚えられるものですよ。」
生徒:「フォルダごとの圧縮や解凍もできるので、学校の資料をまとめるときにも使えそうです。」
先生:「その通りです。実際の生活に結びつけて使えると、プログラムの理解も深まりますよ。」
生徒:「ファイル名の間違いや権限エラーも注意ですね。次は、自分のパソコンの写真をまとめる自動化スクリプトを作ってみます。」
先生:「とても良い目標です。今回学んだ基礎を使えば、きっと作れますよ。」