Python

【Python】データを圧縮・解凍する方法【zipfileモジュール】

この記事では、Pythonでデータ(ファイル)を圧縮・解凍する方法を解説します。データを圧縮することで、容量の大きなデータを小さくしたり、複数のデータをまとめたりすることができます。それでは、データを圧縮・解凍する方法を見ていきましょう❗️

zipfileモジュール

Pythonでデータを圧縮・解凍するには、zipfileモジュールを使うと簡単です。データをZIPファイルとして圧縮・解凍できます。

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 指定することで、圧縮レベルをオーバーライドできます

サンプル

それでは、適当なファイルを圧縮してみましょう!

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.txtdir/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のデータの圧縮と解凍について解説しました。

データを圧縮することで、パソコンの容量を節約することができます。すぐに必要はないけど保存しておきたいデータなどは圧縮しておくと便利です。

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』