PYTHON MEBY

PythonでZIPファイルを読み書き(zipfile)

この記事では、Pythonのzipfileモジュールを使って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}")

関連記事