![](/img/trans.png)
[英]Python - TypeError: write() argument must be str, not bytes
[英]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.