我有一个用Python2.7编写的函数解压缩
def unzip(text):
try:
return gzip.GzipFile(fileobj=StringIO(text)).read()
except IOError:
return text
使用Python3.7运行时,出现错误
TypeError: can't concat str to bytes
我尝试过
将其更改为return gzip.GzipFile(fileobj=bytes(text, 'utf-8')).read()
但随后我得到了:AttributeError: 'bytes' object has no attribute 'read'
答案 0 :(得分:0)
StringIO
产生字符串(str
)对象,需要进行相应的编码/解码。参见https://docs.python.org/3/library/io.html#text-i-o。
在您要处理二进制数据的情况下,您需要使用BytesIO
。参见https://docs.python.org/3/library/io.html#binary-i-o。
您不能直接使用bytes
,因为GzipFile
期望使用read
方法的类文件对象。
您的代码在python 2中而不是在python 3中工作的原因是因为bytes
和str
在python 2中是相同的。如果您有需要在两个版本中都工作的代码,则您可能需要使用BytesIO
模块中的io
类。参见https://docs.python.org/2.7/library/io.html#binary-i-o。