読者です 読者をやめる 読者になる 読者になる

ami_GS's diary

情報系大学院生の備忘録。ネットワークの勉強にハマっています。

zlibで文字列圧縮

Python 文字列

長く書こうとするから書く気が起きないのだ。簡潔に書く。

Pythonのzlibパッケージを使って文字列圧縮を行う。
かなり圧縮されるのでネットワークに流す時に使えるかも。

import zlib
import string
import random
N = 10000

space = " "*N
onestr = "1"*N
numstr = "".join([str(i%10) for i in range(N)])
rndnum = "".join([str(random.randint(0,9)) for i in range(N)])
rndstr = "".join(random.choice(string.ascii_uppercase + string.digits) for i in range(N))

print "space:", len(space), "->", len(zlib.compress(space))#空白オンリー
print "onestr:", len(onestr), "->", len(zlib.compress(onestr))#1オンリー
print "numstr:", len(numstr), "->", len(zlib.compress(numstr))#0-9順番
print "rndnum:", len(rndnum), "->", len(zlib.compress(rndnum))#0-9ランダム
print "rndstr:", len(rndstr), "->", len(zlib.compress(rndstr))#ランダム文字列

様々な文字列を圧縮してみます

出力は

space: 10000 -> 34
onestr: 10000 -> 34
numstr: 10000 -> 54
rndnum: 10000 -> 5082
rndstr: 10000 -> 6719

同じ物の繰り返しに対する圧縮すごい。百分の一以上の性能。
ランダムでも半分圧縮できる。こりゃすごい。

ちなみに元に戻すには、以下の通りに。

zlib.decompress(space)


圧縮した物を何度もzlib.compress()にかけてもデータ量が増えるだけなので注意。