Python中将Zip文件转为类字节对象时遇TypeError的问题咨询
解决打开Zip文件并转为类字节对象时的TypeError问题
错误原因
你碰到的 TypeError: a bytes-like object is required, not 'list' 是因为用了 f.readlines() 方法——这个方法会把文件按行读取,返回字节列表,而 base64.b64encode 和 io.BytesIO 都要求传入单个的字节对象,不是列表类型。
正确代码示例
1. 将Zip文件转为类字节对象并做Base64编码
import base64 with open("results.zip", 'rb') as f: # 用read()读取整个文件,得到单个bytes对象 data = f.read() encoded = base64.b64encode(data)
2. 读取Zip文件内的内容
注意要导入io模块,之前的代码漏了这一步:
import zipfile import io with open("results.zip", 'rb') as f: data = f.read() # 获取完整的字节流 zf = zipfile.ZipFile(io.BytesIO(data), "r") for fileinfo in zf.infolist(): print(zf.read(fileinfo).decode('ascii'))
关键注意点
- 替换
f.readlines()为f.read():前者返回每行字节组成的列表,后者返回整个文件的单个bytes对象,这才是方法需要的「类字节对象」 - 所有依赖字节流的操作(Base64编码、BytesIO包装)都必须传入单个bytes对象,不能用列表
内容的提问来源于stack exchange,提问作者PythonKiddieScripterX
相关产品推荐
相关产品推荐

