Python使用zlib保存压缩字符串时遭遇类型错误求助
解决zlib压缩字符串并保存到文件的类型错误问题
你的问题出在两个核心点上:
- zlib的
compress()方法只接受字节对象(bytes),不能直接传入字符串 - 写入字节类型的压缩数据时,必须用二进制写入模式打开文件,不能用普通文本模式
错误拆解
- 第一次报错是因为直接把字符串
'Hello world'传给了zlib.compress(),这个方法要求输入必须是bytes类型,所以需要先把字符串编码为字节(比如用encode()),或者直接定义字节字面量b'Hello world'。 - 转成字节后仍报错,是因为你用
open('outfile.txt', 'w')的文本模式打开文件——这种模式只能写入字符串,而压缩后的compressed_data是bytes类型,必须改成'wb'(二进制写入模式)。 - 另外你中间写的
new_data = zlib.compress(my_data.encode())之后又compressed_data = zlib.compress(new_data, 2)属于重复压缩,完全没必要,只需要压缩一次即可。
正确代码示例
方式1:字符串转字节后压缩
import zlib my_data = 'Hello world' # 将字符串编码为bytes,再传入compress,第二个参数是压缩级别(0-9,0不压缩,9最高压缩率) compressed_data = zlib.compress(my_data.encode(), 2) # 用二进制写入模式打开文件,with语句会自动关闭文件 with open('outfile.txt', 'wb') as f: f.write(compressed_data)
方式2:直接使用字节字面量
import zlib my_data = b'Hello world' compressed_data = zlib.compress(my_data, 2) with open('outfile.txt', 'wb') as f: f.write(compressed_data)
内容的提问来源于stack exchange,提问作者ForthRider
相关产品推荐
相关产品推荐

