今日の記事では、Pythonのgzipモジュールについて見ていきます。
このモジュールは gzip ファイル (.gz
) を扱うための簡単な方法を提供してくれます。
これはLinuxのユーティリティコマンドである gzip
や gunzip
と非常によく似た動作をします。
それでは、いくつかの例を使って、このモジュールを効果的に使用する方法を見ていきましょう!
Python で gzip モジュールを使う
このモジュールは、これらのファイル拡張子を素早く扱うための open()
, compress()
, decompress()
といった高レベルな関数を提供してくれます。
基本的に、これは単にファイルを開くだけです!
このモジュールをインポートするには、以下のような記述が必要です。
import gzip
|
このモジュールは標準ライブラリの一部なので、pipでインストールする必要はありません! では、さっそくgzipファイルを扱ってみましょう。
圧縮ファイルへの書き込み
gzip.open()
メソッドを使って .gz
ファイルを直接開き、圧縮されたファイルに書き込むことができます!
import gzip
import os
import io
name = 'sample.txt.gz'
with gzip. open (name, 'wb' ) as output:
# We cannot directly write Python objects like strings!
# We must first convert them into a bytes format using io.BytesIO() and then write it
with io.TextIOWrapper(output, encoding = 'utf-8' ) as encode:
encode.write( 'This is a sample text' )
# Let's print the updated file stats now print (f "The file {name} now contains {os.stat(name).st_size} bytes" )
|
ここで、文字列のような Python オブジェクトを直接書き込むことができないことに注意してください!
まず、 io.TextIOWrapper()
を使ってバイト形式に変換し、それからこのラッパー関数を使って書き込まなければなりません。
これが、ファイルをバイナリライトモード(wb
)で開いている理由です。
このプログラムを実行すると、以下のような出力が得られます。
結果は以下の通りです。
The file sample.txt.gz now contains 57 bytes
|
また、カレントディレクトリに sample.txt.gz
というファイルが作成されていることが確認できます。
さて、これで圧縮ファイルへの書き込みに成功しました。
それでは、圧縮ファイルを解凍して中身を読み出してみましょう。
この記事もチェック:Pythonのfpdfモジュールを使って文字列やファイルをPDFに変換する方法
gzipファイルから圧縮されたデータを読み込む
ラッパーを使った write()
関数と同じように、同じ関数を使って read()
もできます。
import gzip
import os
import io
name = 'sample.txt.gz'
with gzip. open (name, 'rb' ) as ip:
with io.TextIOWrapper(ip, encoding = 'utf-8' ) as decoder:
# Let's read the content using read()
content = decoder.read()
print (content)
|
結果は以下の通りです。
This is a sample text |
確かに、最初に書いたのと同じテキストが戻ってきました!このように、圧縮されたデータを読み取ることができます。
この記事もチェック:Pythonのmmapの使い方|ファイルのreadやwriteのやり方を解説
データを圧縮する
このモジュールのもうひとつの便利な機能は、gzip
を使って効率的にデータを圧縮できることです。
入力として多くのバイトコンテンツがある場合、 gzip.compress()
関数を使用して圧縮することができます。
import gzip
ip = b "This is a large wall of text. This is also from Python"
out = gzip.compress(ip)
|
この場合、バイナリ文字列は gzip.compress
を用いて圧縮される。
まとめ
この記事では、Pythonのgzipモジュールを使って、.gz
ファイルの読み書きを行う方法について学びました。