gzipモジュールを使った圧縮と展開 - Python
vcrpyでは、レスポンスの量が多い場合、圧縮されて(バイナリになって)カセットに格納される。どうやって圧縮されたデータを扱うのか調べてみたら標準モジュールのgzipモジュールでできそうだったため、メモしておく
圧縮にはgzip.compress()
メソッド。展開にはgzip.decompress()
メソッド。それぞれ、バイト配列を扱う。
文字列を圧縮して、展開して、取得してみた
>>> import gzip >>> t_bytes = bytes('あいう123abc', 'utf-8') >>> t_bytes b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86123abc' >>> compressed_bytes = gzip.compress(t_bytes) # 圧縮 >>> compressed_bytes b'\x1f\x8b\x08\x00G::[\x02\xff{\xdc\xd8\xf4\xb8\xb1\xe5qc\x9b\xa1\x91qbR2\x00\xe1\xc7\x079\x0f\x00\x00\x00' >>> decompressed_bytes = gzip.decompress(compressed_bytes) # 展開 >>> decompressed_bytes b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86123abc' >>> decompressed_bytes.decode('utf-8') 'あいう123abc'
gzip.compress()
にはバイト配列(bytes)を渡さないといけないため、bytes(str, 'utf-8')
でバイト配列を作成する
gzip.compress()
に作成したバイト配列を渡して、圧縮する。
展開にはgzip.decompress()
を使う。圧縮されているバイト配列を渡すことで、展開してくれる
展開したバイト配列をbytes.decode()
で文字列に変換し、終了
これで、一応、圧縮と展開ができるようになった