この記事では、Pythonでデータ(ファイル)を圧縮・解凍する方法を解説します。
データを圧縮することで容量の大きなデータを小さくしたり、複数のデータをまとめたりすることができます。ちなみに、ここではZIP形式で圧縮します。
それでは、データを圧縮・解凍する方法を見ていきましょう❗️
データを圧縮・解凍するには、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
より古いファイルを圧縮できます。
データを圧縮するには、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ファイルを解凍するには、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のデータの圧縮と解凍について解説しました。
データを圧縮することでパソコンの容量を節約することができます。すぐに必要はないけど保存しておきたいデータなどは圧縮しておくと便利です。
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ