You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用zlib保存压缩字符串时遭遇类型错误求助

解决zlib压缩字符串并保存到文件的类型错误问题

你的问题出在两个核心点上:

  • zlib的compress()方法只接受字节对象(bytes),不能直接传入字符串
  • 写入字节类型的压缩数据时,必须用二进制写入模式打开文件,不能用普通文本模式

错误拆解

  1. 第一次报错是因为直接把字符串'Hello world'传给了zlib.compress(),这个方法要求输入必须是bytes类型,所以需要先把字符串编码为字节(比如用encode()),或者直接定义字节字面量b'Hello world'。
  2. 转成字节后仍报错,是因为你用open('outfile.txt', 'w')的文本模式打开文件——这种模式只能写入字符串,而压缩后的compressed_data是bytes类型,必须改成'wb'(二进制写入模式)。
  3. 另外你中间写的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:57:41