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圧縮や解凍ができます。難しい操作は不要です。