gzip Python3无法将字节转换为字符串

时间:2019-07-23 21:16:34

标签: python

我有一个用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'

1 个答案:

答案 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中工作的原因是因为bytesstr在python 2中是相同的。如果您有需要在两个版本中都工作的代码,则您可能需要使用BytesIO模块中的io类。参见https://docs.python.org/2.7/library/io.html#binary-i-o