LoginSignup
0
2

More than 3 years have passed since last update.

PythonのGzipFileクラスはBufferedReaderを経由してreadされる

Posted at

だからどうしたという話ですが、GzipFileを使ったコードを書いていて気がついたのでメモです。

GzipFileとは

Pythonでgzipを扱うクラスです。

コンストラクタにファイル名を渡すとローカルのGzipファイル、fileobjを渡すことでファイル「っぽい」Gzipオブジェクトの読み書きが出来ます。

BufferedReaderを使っている箇所

GzipFileのコンストラクタ内では、下の図のように

  • 実際のioClass(引数のfileobj、もしくはファイル名から取得したファイル)を
  • 実際の読み込みを行う_GzipReaderでラップ
  • さらに、それをBufferedReaderでラップ

する関係になっており、GzipFileをreadする時はBufferedReaderを経由することになります(※)。

gzip_class.png

※より正確には、_GzipReaderとIoClassの間に、_PaddedFileというクラスが挟まります

バッファのサイズを変えたい時

GzipFileはBufferedReaderのバッファーサイズにデフォルト(io.DEFAULT_BUFFER_SIZE)を使います。

読み込み対象のioによっては、より大きな単位でバッファしたい時もあるかもしれません(※)。
が、GzipFileの機能ではバッファサイズが変更出来ないようなので、GzipFileのfileobjにBufferedReaderを渡しましょう。

※ 例えば、GCSはダウンロードする単位が小さい(数KB単位)だと、パフォーマンスが落ちるそうです

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2