繁体   English   中英

write()参数必须为str,而不是字节数python

[英]write() argument must be str, not bytes python

我是python的新手。 我得到了这个预先编写的代码,可以下载数据以进行报告。 但是我得到了错误

“ write()参数必须是str,而不是字节”。

见下面的代码

def _download_report(service, response, ostream):

    logger.info('Downloading keyword report')
    written_header = False
    for fragment in range(len(response.files)):
      file_request = service.reports().getFile(
        reportId=response.id_, reportFragment=fragment)
      istream = io.BytesIO(file_request.execute())

    if written_header:
      istream.readline()
    else:
      written_header = True
    ostream.write(istream.read())

您需要将最后一行更改为

ostream.write(istream.read().decode('utf-8'))

PS。 您可能需要用数据中的任何编码替换`'utf-8'

要详细说明@sgDysregulation的答案:

python 3的一个独特之处是字符串( 'hello, world' )和二进制字符串( b'hello, world' )基本不兼容。 例如,如果您熟悉基本文件I / O,则有两种类型的文件读取模式-您可以使用open('file.txt', 'r') ,当您读取文件时返回unicode字符串。从文件中读取,或从open('file,txt', 'rb')读取,它返回二进制字符串。 写入同样如此-您不能在'wb'模式下正确写入字符串,也不能在'w'模式下写入二进制字符串。

在这种情况下,您的istream在读取时返回二进制字符串,而您的ostream希望编写一个unicode字符串。 解决方案是将编码从一种更改为另一种,然后执行sgDysregulation建议的操作:

ostream.write(istream.read().decode('utf-8'))

这假定二进制字符串可能以utf-8格式编码。 否则,您可能必须使用其他格式。

您必须解码BytesIO对象以获取可以写入文件的字符串:

ostream.write(istream.read().decode('utf-8'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM