「brotli形式でデータを圧縮したい」
「Pythonでbrotli形式の圧縮・解凍を行いたい」
このような場合には、Brotliがオススメです。
この記事では、Brotliについて解説しています。
本記事の内容
- Brotliとは?
- Brotliのシステム要件
- Brotliのインストール
- Brotliの動作確認
それでは、上記に沿って解説していきます。
Brotliとは?
ここで言うBrotliとは、Pythonでbrotli形式の圧縮・解凍を可能にするライブラリです。
brotliは、Googleが開発した圧縮アルゴリズムになります。
この記事では、次の意味で使い分けています。
brotli | 圧縮アルゴリズム |
Brotli | Pythonライブラリ |
brotliは、HTTP圧縮を主な目的としています。
おそらく、みなさんもその恩恵を受けているはずです。
みなさんが利用しているブラウザは、brotli形式のデータをやり取りしています。
現在のブラウザは、以下のようにリクエストヘッダーを送ります。
ここに「br」がありますね。
ブラウザとしては、brotli形式でもデータのやり取りができると宣言しています。
それに対して、ページがbrotli形式に対応していれば次のようなレスポンスヘッダーとなります。
ただ、まだまだgzip形式の返答が多いように感じます。
文章的なテキストでは、brotliはgzipよりも圧縮率が高いです。
今後は、brotliの利用がさらに増えるかもしれません。
そんなbrotli形式の圧縮をPythonで可能にするのが、Brotliということです。
以上、Brotliについて説明しました。
次は、Brotliのシステム要件を説明します。
Brotliのシステム要件
現時点(2022年8月)でのBrotliの最新バージョンは、1.0.9となります。
この最新バージョンは、2020年8月27日にリリースされています。
更新は止まっているようです。
逆に言えば、もう機能的に完成したとも言えます。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 2.7
- Python 3.3
- Python 3.4
- Python 3.5
これは開発が止まっているから、仕方がないでしょう。
可能なら、以下のPython公式開発サイクルには合わせて欲しいですね。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
サポート対象にないから不安になりますが、Python 3.10でも問題なく動きます。
ここでは、Python公式開発サイクルに従ってPython 3.7以降を推奨しておきます。
以上、Brotliのシステム要件を説明しました。
次は、Brotliのインストールを説明します。
Brotliのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.2
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 22.2.2 setuptools 63.4.1 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、Brotliのインストールです。
Brotliのインストールは、以下のコマンドとなります。
pip install Brotli
Brotliのインストールは、一瞬で終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ---------- ------- Brotli 1.0.9 pip 22.2.2 setuptools 63.4.1 wheel 0.36.2
Brotliが依存するパッケージは、ありません。
そのため、Brotliは既存環境に容易に導入可能です。
以上、Brotliのインストールを説明しました。
次は、Brotliの動作確認を説明します。
Brotliの動作確認
Brotliの動作確認を行います。
以下の動作に分けて確認します。
- 圧縮
- 解凍
圧縮対象となる元データは、テキストファイルとします。
内容は、そこそこ長い文章であれば何でもいいです。
「org.txt」は、wikipediaのbrotliページの内容をコピーしたモノです。
ファイルサイズは、8.9Kバイトあります。
圧縮
用意した「org.txt」をbrotli形式に圧縮します。
テキストファイルを圧縮するコードは、以下。
test_compress.py
import brotli file_path = 'org.txt' br_file_path = 'compressed.br' with open(file_path, 'rb') as f: data = f.read() compressed_data = brotli.compress(data) with open(br_file_path, mode='wb') as f: f.write(compressed_data)
上記を実行すると、「compressed.br」というファイルが作成されます。
「compressed.br」のファイルサイズは、3.6Kバイトです。
8.9Kが3.6Kにまで圧縮されています。
圧縮率で言うと、0.4となります。
解凍
brotli形式で圧縮されたファイルを解凍してみましょう。
圧縮ファイルは、「compressed.br」を利用します。
test_decompress.py
import brotli file_path = 'decompressed.txt' br_file_path = 'compressed.br' with open(br_file_path, 'rb') as f: data = f.read() decompressed_data = brotli.decompress(data) with open(file_path, mode='wb') as f: f.write(decompressed_data)
上記コードを実行すると、「decompressed.txt」が作成されます。
これは、brotli形式で圧縮されたファイルを解凍したモノとなります。
「decompressed.txt」のファイルサイズは、8.9Kバイトです。
「org.txt」と同じファイルサイズになります。
最後に、「org.txt」と「decompressed.txt」の内容を比較しておきます。
$ diff org.txt decompressed.txt $
全く同じ内容です。
ここまで確認できれば、安心してBrotliを利用することができます。
以上、Brotliの動作確認を説明しました。