2011-12-14 38 views
63

我如何在Python中压缩字符串?我如何在Python中压缩字符串?

gzip.GzipFile存在,但这是文件对象 - 用纯字符串呢?

+7

第一个结果,那实况只提到'StringIO`但确实没有真正解释如何去做。所以在这里问这个问题是完全有效的,恕我直言。不过,在询问和告诉我们关于它们之前的一些更多的试验本来是不错的。 – KevinDTimm 2011-12-14 15:18:08

+0

@KevinDTimm – Alfe 2015-06-04 08:45:50

+0

@Alfe - 这个问题在4年前关闭,原因与我的评论大致相同--OP没有首先进行搜索。 – KevinDTimm 2015-06-04 13:05:55

回答

52

最简单的方法是zlibencoding

compressed_value = s.encode("zlib") 

然后你解压:

plain_string_again = compressed_value.decode("zlib") 
123

如果你想制作一个完整的gzip兼容的二进制字符串,用头等等,您可以使用gzip.GzipFileStringIO

import StringIO 
import gzip 
out = StringIO.StringIO() 
with gzip.GzipFile(fileobj=out, mode="w") as f: 
    f.write("This is mike number one, isn't this a lot of fun?") 
out.getvalue() 

# returns '\x1f\x8b\x08\x00\xbd\xbe\xe8N\x02\xff\x0b\xc9\xc8,V\x00\xa2\xdc\xcc\xecT\x85\xbc\xd2\xdc\xa4\xd4"\x85\xfc\xbcT\x1d\xa0X\x9ez\x89B\tH:Q!\'\xbfD!?M!\xad4\xcf\x1e\x00w\xd4\xea\xf41\x00\x00\x00' 
-5
s = "a long string of characters" 

g = gzip.open('gzipfilename.gz', 'w', 5) # ('filename', 'read/write mode', compression level) 
g.write(s) 
g.close() 
为“蟒蛇gzip的” http://docs.python.org/library/gzip.html(也许你可以尝试一点点?)