gzip — gzipファイルのサポート—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/gzip
移動先:案内検索

gzip — gzip ファイルのサポート

ソースコード: :source: `Lib / gzip.py`



このモジュールは、GNUプログラム gzip および gunzip と同じように、ファイルを圧縮および解凍するためのシンプルなインターフェイスを提供します。

データ圧縮は、 zlib モジュールによって提供されます。

gzip モジュールは、 GzipFile クラス、および open()compress()decompress()を提供します。 便利な機能。 GzipFile クラスは、 gzip 形式のファイルの読み取りと書き込みを行い、通常のファイルオブジェクトのようにデータを自動的に圧縮または解凍します。

compress および pack によって生成されるものなど、 gzip および gunzip プログラムによって解凍できる追加のファイル形式は次のとおりです。このモジュールではサポートされていません。

このモジュールは、次の項目を定義します。

gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)

gzipで圧縮されたファイルをバイナリモードまたはテキストモードで開き、ファイルオブジェクトを返します。

filename 引数は、実際のファイル名( str または bytes オブジェクト)、または読み取りまたは書き込みを行う既存のファイルオブジェクトにすることができます。

mode 引数には、'r''rb''a''ab''w''wb''x''xb'、または'rt''at''wt'、 [X195X ]テキストモードの場合。 デフォルトは'rb'です。

compresslevel 引数は、 GzipFile コンストラクターと同様に、0から9までの整数です。

バイナリモードの場合、この関数は GzipFile コンストラクターGzipFile(filename, mode, compresslevel)と同等です。 この場合、 encodingerrors 、および newline 引数を指定しないでください。

テキストモードの場合、 GzipFile オブジェクトが作成され、指定されたエンコーディング、エラー処理動作、および行末で io.TextIOWrapper インスタンスにラップされます。

バージョン3.3で変更:ファイルオブジェクトであるファイル名のサポート、テキストモードのサポート、エンコーディングエラー、が追加されました。 X160X] newline 引数。

バージョン3.4で変更: 'x''xb'、および'xt'モードのサポートが追加されました。

バージョン3.6で変更: パスのようなオブジェクトを受け入れます。

exception gzip.BadGzipFile

無効なgzipファイルに対して発生した例外。 OSError を継承します。 EOFError および zlib.error は、無効なgzipファイルに対しても発生する可能性があります。

バージョン3.8の新機能。

class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

GzipFile クラスのコンストラクター。truncate()メソッドを除くファイルオブジェクトのほとんどのメソッドをシミュレートします。 fileobjfilename の少なくとも1つに重要な値を指定する必要があります。

新しいクラスインスタンスは、 fileobj に基づいています。これは、通常のファイル、 io.BytesIO オブジェクト、またはファイルをシミュレートするその他のオブジェクトです。 デフォルトはNoneです。この場合、ファイル名が開かれ、ファイルオブジェクトが提供されます。

fileobjNoneでない場合、 filename 引数は、 gzip ファイルヘッダーにインクルードするためにのみ使用されます。これには元のファイル名が含まれる場合があります。圧縮されていないファイルの。 識別可能な場合、デフォルトで fileobj のファイル名になります。 それ以外の場合は、デフォルトで空の文字列になります。この場合、元のファイル名はヘッダーに含まれません。

mode 引数には、'r''rb''a''ab''w''wb''x'、または'xb'は、ファイルの読み取りまたは書き込みのどちらであるかによって異なります。 識別可能な場合、デフォルトは fileobj のモードです。 それ以外の場合、デフォルトは'rb'です。

ファイルは常にバイナリモードで開かれることに注意してください。 圧縮ファイルをテキストモードで開くには、 open()を使用します(または GzipFileio.TextIOWrapper でラップします)。

compresslevel 引数は、圧縮レベルを制御する0から9までの整数です。 1は最も速く、最小の圧縮を生成し、9は最も遅く、最大の圧縮を生成します。 0は圧縮なしです。 デフォルトは9です。

mtime 引数は、圧縮時にストリームの最終変更時刻フィールドに書き込まれるオプションの数値タイムスタンプです。 圧縮モードでのみ提供する必要があります。 省略またはNoneの場合、現在の時刻が使用されます。 詳細については、 mtime 属性を参照してください。

GzipFile オブジェクトのclose()メソッドを呼び出しても、 fileobj は閉じられません。これは、圧縮されたデータの後にさらに資料を追加したい場合があるためです。 これにより、書き込み用に開いた io.BytesIO オブジェクトを fileobj として渡し、 io.BytesIO オブジェクトのを使用して結果のメモリバッファーを取得することもできます。 getvalue()メソッド。

GzipFile は、 io.BufferedIOBase インターフェイスをサポートします。これには、反復と with ステートメントが含まれます。 truncate()メソッドのみが実装されていません。

GzipFile は、次のメソッドと属性も提供します。

peek(n)

ファイル位置を進めずに n 非圧縮バイトを読み取ります。 呼び出しを満たすために、圧縮ストリームで最大1回の読み取りが実行されます。 返されるバイト数は、要求された数より多い場合と少ない場合があります。

ノート

peek()を呼び出しても、 GzipFile のファイル位置は変更されませんが、基になるファイルオブジェクトの位置は変更される可能性があります(例: GzipFilefileobj パラメーターを使用して作成された場合)。

バージョン3.2の新機能。

mtime

解凍時に、最後に読み取られたヘッダーの最終変更時刻フィールドの値が、この属性から整数として読み取られる場合があります。 ヘッダーを読み取る前の初期値はNoneです。

すべての gzip 圧縮ストリームには、このタイムスタンプフィールドが含まれている必要があります。 gunzip などの一部のプログラムは、タイムスタンプを利用します。 形式は、 time.time()の戻り値および os.stat()によって返されるオブジェクトの st_mtime 属性と同じです。

バージョン3.1での変更: with ステートメントのサポートが、 mtime コンストラクター引数および mtime 属性とともに追加されました。

バージョン3.2で変更:ゼロが埋め込まれ、シークできないファイルのサポートが追加されました。

バージョン3.3で変更: io.BufferedIOBase.read1()メソッドが実装されるようになりました。

バージョン3.4で変更: 'x'および'xb'モードのサポートが追加されました。

バージョン3.5で変更:任意のバイトのようなオブジェクトの書き込みのサポートが追加されました。 read()メソッドは、Noneの引数を受け入れるようになりました。

バージョン3.6で変更: パスのようなオブジェクトを受け入れます。

gzip.compress(data, compresslevel=9, *, mtime=None)

data を圧縮し、圧縮されたデータを含む bytes オブジェクトを返します。 compresslevel および mtime は、上記の GzipFile コンストラクターと同じ意味を持ちます。

バージョン3.2の新機能。

バージョン3.8で変更:再現可能な出力用に mtime パラメーターを追加しました。

gzip.decompress(data)

data を解凍し、圧縮されていないデータを含む bytes オブジェクトを返します。

バージョン3.2の新機能。

使用例

圧縮ファイルの読み取り方法の例:

import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
    file_content = f.read()

圧縮されたGZIPファイルを作成する方法の例:

import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
    f.write(content)

既存のファイルをGZIPで圧縮する方法の例:

import gzip
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:
    with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)

バイナリ文字列をGZIP圧縮する方法の例:

import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)

も参照してください

モジュール zlib
gzip ファイル形式をサポートするために必要な基本的なデータ圧縮モジュール。


コマンドラインインターフェイス

gzip モジュールは、ファイルを圧縮または解凍するためのシンプルなコマンドラインインターフェイスを提供します。

実行されると、 gzip モジュールは入力ファイルを保持します。

バージョン3.8で変更:使用法を含む新しいコマンドラインインターフェイスを追加します。 デフォルトでは、CLIを実行するとき、デフォルトの圧縮レベルは6です。


コマンドラインオプション

file
ファイルが指定されていない場合は、 sys.stdin から読み取ってください。
--fast
最速の圧縮方法(圧縮率が低い)を示します。
--best
最も遅い圧縮方法(最良の圧縮)を示します。
-d, --decompress
指定されたファイルを解凍します。
-h, --help
ヘルプメッセージを表示します。