この記事では、Pythonでデータ(ファイル)を圧縮・解凍する方法を解説します。
データを圧縮することで容量の大きなデータを小さくしたり、複数のデータをまとめたりすることができます。ちなみに、ここではZIP形式で圧縮します。
それでは、データを圧縮・解凍する方法を見ていきましょう❗️
zipfileモジュール
データを圧縮・解凍するには、zipfileモジュールを使うと簡単です。zipfileモジュールは、標準ライブラリなのでインポートするだけで使用可能です。
使い方
zipfile.ZipFile()を使ってZipFileオブジェクトを生成し、そのオブジェクトを通してデータを圧縮・解凍します。
import zipfile zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True)
引数
引数がたくさん定義されているので1つずつ見ていきましょう!
file:
作成、または読み込むファイル名を指定します。
mode:
ファイルの開き方を指定します。
| 'r' | 既存のファイルを読み込む |
|---|---|
| 'w' | 新しいファイルを切り捨てて書き込む |
| 'a' | 既存のファイルに追加する |
| 'x' | 新しいファイルを排他的に作成して書き込む |
compression:
圧縮形式を指定します。
| zipfile.ZIP_STORED | 圧縮せず複数ファイルをまとめる(デフォルト) |
|---|---|
| zipfile.ZIP_DEFLATED | 一般的なZIP圧縮 |
| zipfile.ZIP_BZIP2 | BZIP2圧縮 |
| zipfile.ZIP_LZMA | LZMA圧縮 |
allowZip64:
allowZip64がTrue(デフォルト)の場合、zipファイルが4GiBより大きいとzipfileはZIP64拡張子を使用するZIPファイルを作成します。 Falseの場合、ZIPファイルがZIP64拡張子を必要とするとzipfileは例外を発生させます。
compresslevel:
ファイルを書き込むときに使用する圧縮レベルを制御します。圧縮形式にZIP_DEFLATEDを使う場合0〜9、ZIP_BZIP2を使う場合は1~9までの整数を指定できます。大きい値ほど多くのメモリを消費しますが、速く、小さな出力を作成できます。
strict_timestamps:
Falseに設定するとタイムスタンプを1980-01-01に設定する代わりに1980-01-01より古いファイルを圧縮できます。
ZIPファイルとして圧縮
データを圧縮するには、ZipFile.write()メソッドを使います。
ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)
| filename | 圧縮するファイル名を指定します |
|---|---|
| arcname | ZIPファイルに追加された際のファイル名を指定します |
| compress_type | 指定することで、圧縮形式をオーバーライドできます |
| compresslevel | 指定することで、圧縮レベルをオーバーライドできます |
サンプル
それでは、適当なファイルを圧縮してみましょう!
以下のコードでは、「test1.txt」と「test2.txt」を「test.zip」にまとめて圧縮しています。
import zipfile with zipfile.ZipFile('test.zip', 'w') as zf: zf.write('test1.txt', 'test1.txt', zipfile.ZIP_DEFLATED) zf.write('test2.txt', 'dir/test2.txt')
先ほどのコードを実行すると、以下のようなZIPファイルが生成されます。
展開して中身を確認してみましょう!
無事にtest.txtとdir/test2.txtが確認できました!
ZIPファイルの解凍
ZIPファイルを解凍するには、ZipFile.extractall()メソッドを使います。
ZipFile.extractall(path=None, members=None, pwd=None)
| path | 展開先のディレクトリを指定します。デフォルトでは、カレントディレクトリに展開されます |
|---|---|
| members | namelist()で返されるリストの部分集合を指定します。指定した場合は、そのファイルのみを展開します。 |
| pwd | 暗号化ファイルに使われるパスワードを指定します。 |
サンプル
先ほど圧縮のサンプルで作成したtest.zipを解凍してみます。
import zipfile with zipfile.ZipFile('test.zip') as zf: zf.extractall()
先ほどのコードを実行すると、以下のようにZIPファイルが全て展開されました。
まとめ
この記事では、Pythonのデータの圧縮と解凍について解説しました。
データを圧縮することでパソコンの容量を節約することができます。すぐに必要はないけど保存しておきたいデータなどは圧縮しておくと便利です。
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ
- zipfile --- ZIP アーカイブの処理


