如何使用zlib压缩字符串并得到返回字符串?
我正在尝试使用Zlib来压缩文本。
比如说,我有一个字符串 T='blah blah blah blah'
,我需要对这个字符串进行压缩。我使用 S=zlib.compress(T)
来进行压缩。现在我想要的是得到 S
的非二进制形式,这样我就可以在另一个程序中解压缩 T
。
谢谢!
编辑:我想我找到了一个方法来解决我想要的。这里是这个方法:
import zlib, base64
text = 'STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW '
code = base64.b64encode(zlib.compress(text,9))
print code
这个方法的结果是:
eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU=
现在我可以把这段代码复制到另一个程序中,以便恢复原来的变量:
import zlib, base64
s='eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU='
data = zlib.decompress(base64.b64decode(s))
print data
如果你知道其他压缩方法能得到更好的结果,请告诉我。
2 个回答
1
根据被接受的答案中的评论,对于python 3的用户,按照zlib的文档说明:
def compress(data, /, level=-1)
Returns a bytes object containing compressed data.
data
Binary data to be compressed.
level
Compression level, in 0-9 or -1.
(END)
这意味着第一个参数必须是字节类型,而"T"是字符串,不是字节。你只需要使用来自str类型的.encode()
方法,就可以把这个字符串转换成字节类型,举个例子:
T = 'blah blah blah blah'
S = zlib.compress(T.encode())
这就解释了错误TypeError: a bytes-like object is required, not 'str'
的原因,并且提供了解决办法。
15
程序 1:
T = 'blah blah blah blah'
S = zlib.compress(T)
with open("temp.zlib", "wb") as myfile:
myfile.write(S)
这个程序会把压缩后的字符串保存到一个叫做 temp.zlib
的文件里,这样程序 2 就可以稍后取出这个文件并解压缩它。
程序 2:
with open("temp.zlib", "rb") as myfile:
S = myfile.read()
T = zlib.decompress(S)