PythonでZIPファイルを読み書き(zipfile)
この記事では、Pythonのzipfileモジュールを使ってZIPファイルを圧縮、解凍する方法を説明します。ファイルの追加、削除、リスト表示など、ZIPファイル操作の基本的な方法を学びます。
目次
- zipfileモジュールのインポート
- ZIPファイルの作成
- ZIPファイルへのファイル追加
- ZIPファイルからのファイル抽出
- ZIPファイル内のファイル一覧表示
- ZIPファイル内のファイルの削除
- エラーハンドリング
zipfileモジュールのインポート
zipfileモジュールを使用するには、最初にインポートする必要があります。
import zipfile
ZIPファイルの作成
zipfile.ZipFile()を使ってZIPファイルを作成します。引数にはZIPファイル名とモードを指定します。'w'は書き込みモードです。
import zipfile
# 新しいZIPファイルを作成
with zipfile.ZipFile('my_archive.zip', 'w') as myzip:
pass
このコードでは、空のZIPファイル'my_archive.zip'が作成されます。
ZIPファイルへのファイル追加
write()メソッドを使って、ファイルを追加します。第1引数は追加するファイル名、第2引数はファイルへのパスです。
import zipfile
with zipfile.ZipFile('my_archive.zip', 'a') as myzip:
myzip.write('test.txt')
このコードは、'test.txt'という名前のファイルを'my_archive.zip'に追加します。'a'モードは追記モードです。
ZIPファイルからのファイル抽出
extractall()メソッドを使って、ZIPファイル内のすべてのファイルを解凍します。引数には解凍先のディレクトリを指定します。省略した場合はカレントディレクトリに解凍されます。extract()メソッドで個々のファイルを抽出することもできます。
import zipfile
with zipfile.ZipFile('my_archive.zip', 'r') as myzip:
myzip.extractall('extracted_files')
このコードは、'my_archive.zip'を'extracted_files'ディレクトリに解凍します。'r'モードは読み込みモードです。
ZIPファイル内のファイル一覧表示
namelist()メソッドを使って、ZIPファイル内のファイル名一覧を取得します。
import zipfile
with zipfile.ZipFile('my_archive.zip', 'r') as myzip:
for filename in myzip.namelist():
print(filename)
このコードは、'my_archive.zip'内のファイル名を表示します。
ZIPファイル内のファイルの削除
ZIPファイルからファイルを削除するには、削除したいファイル名を含んだリストを引数にして、close()メソッドでファイルを保存する必要があります。
import zipfile
with zipfile.ZipFile('my_archive.zip', 'a') as myzip:
myzip.write('test2.txt')
with zipfile.ZipFile('my_archive.zip', 'a') as myzip:
myzip.printdir()
myzip.close()
with zipfile.ZipFile('my_archive.zip', 'a') as myzip:
myzip.setpassword(b'mypassword')
myzip.close()
with zipfile.ZipFile('my_archive.zip', 'r') as myzip:
myzip.extractall()
myzip.close()
with zipfile.ZipFile('my_archive.zip', 'a') as myzip:
myzip.remove('test2.txt')
myzip.close()
このコードは、'my_archive.zip'から'test2.txt'を削除します。事前にファイルを追加しておく必要があります。
エラーハンドリング
ZIPファイル操作では、ファイルが存在しない、アクセス権限がないなど、様々なエラーが発生する可能性があります。try...exceptブロックを使用してエラーを処理しましょう。
import zipfile
try:
with zipfile.ZipFile('my_archive.zip', 'r') as myzip:
myzip.extractall()
except FileNotFoundError:
print("ファイルが見つかりません。")
except zipfile.BadZipFile:
print("破損したZIPファイルです。")
except Exception as e:
print(f"エラーが発生しました: {e}")
関連記事
- Pythonでファイルに書き込む(write, writelines)
- Pythonでファイルを読み込む(read, readline, readlines)
- Pythonでファイルを開く・閉じる(open, close)
- Pythonでファイルを追記モードで開く
- Pythonでファイルの上書き・削除
- Pythonでファイル・ディレクトリの存在確認(os.path.exists, os.path.isfile, os.path.isdir)
- Pythonでファイル・ディレクトリの操作(os, shutil, pathlib)
- Pythonでファイルをバイナリモードで読み書き
- Pythonでファイルのエンコーディングを指定して読み書き
- PythonでCSVファイルを読み書き(csv)