Categories: Python

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

この記事では、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:

allowZip64True(デフォルト)の場合、zipファイルが4GiBより大きいとzipfileZIP64拡張子を使用するZIPファイルを作成します。 Falseの場合、ZIPファイルがZIP64拡張子を必要とするとzipfileは例外を発生させます。

compresslevel:

ファイルを書き込むときに使用する圧縮レベルを制御します。圧縮形式にZIP_DEFLATEDを使う場合0〜9ZIP_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.txtdir/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のデータの圧縮と解凍について解説しました。

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

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago