Python3 - gzipで圧縮・読み込み
参考:http://docs.python.jp/3/library/gzip.html
gzip.openで、gzファイルを読み込めるっぽい。 with構文については、ここに詳しい説明があった。
圧縮
バイナリ文字列を圧縮する例
import gzips_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 gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()