Pythonでgzipモジュールを使って圧縮ファイルの読み込み、書き込みをする方法

スポンサーリンク

今日の記事では、Pythonのgzipモジュールについて見ていきます。

このモジュールは gzip ファイル (.gz) を扱うための簡単な方法を提供してくれます。

これはLinuxのユーティリティコマンドである gzipgunzip と非常によく似た動作をします。

それでは、いくつかの例を使って、このモジュールを効果的に使用する方法を見ていきましょう!

スポンサーリンク

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 というファイルが作成されていることが確認できます。

さて、これで圧縮ファイルへの書き込みに成功しました。

それでは、圧縮ファイルを解凍して中身を読み出してみましょう。

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

確かに、最初に書いたのと同じテキストが戻ってきました!このように、圧縮されたデータを読み取ることができます。

データを圧縮する

このモジュールのもうひとつの便利な機能は、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ファイルの読み書きを行う方法について学びました。

タイトルとURLをコピーしました