参考:http://docs.python.jp/3/library/gzip.html
gzip.openで、gzファイルを読み込めるっぽい。 with構文については、ここに詳しい説明があった。
圧縮
バイナリ文字列を圧縮する例
import gzip s_in = b"Lots of content here" s_out = gzip.compress(s_in)
バイナリ文字列を数字でみてみたい。「Python バイナリデータ」に色々書いてあった。「Python 2 と Python 3 のユニコード文字列、バイト列の違いメモ」にも色々書いてあった。 b'hoge'というバイナリ文字列のイテレータは数値を返すらしい。
s_in = b"Lots of content here" print(*s_in)
76 111 116 115 32 111 102 32 99 111 110 116 101 110 116 32 104 101 114 101
数字になった。というか、の使い方知らなかった。イテレータを返すのかな?print()出だけ使えるのかな?page = hogeとかやるとエラーになる。
s_in = b"Lots of content here" print(*s_in) s_out = gzip.compress(s_in) print(*s_out)
76 111 116 115 32 111 102 32 99 111 110 116 101 110 116 32 104 101 114 101 31 139 8 0 158 81 118 88 2 255 243 201 47 41 86 200 79 83 72 206 207 43 73 205 43 81 200 72 45 74 5 0 126 117 32 142 20 0 0 0
圧縮したのに数字が増えている。数字が40個あるっぽいから倍になっている。同じ文字というか数字があると圧縮は効いてくるらしい。
s_in = b"aaaaaaaaaaaaaaaaaaaa" print(*s_in) s_out = gzip.compress(s_in) print(*s_out)
97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 31 139 8 0 172 82 118 88 2 255 75 76 196 4 0 206 139 111 38 20 0 0 0
短くなったけどまだ長い。
s_in = b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" print(*s_in) s_out = gzip.compress(s_in) print(*s_out)
97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 9 7 97 97 97 97 97 97 97 97 31 139 8 0 13 83 118 88 2 255 75 76 164 61 0 0 100 122 112 175 100 0 0 0
おー圧縮された。
読み込み
圧縮されたファイルを読み込む例
import gzip with gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()