为了账号安全,请及时绑定邮箱和手机立即绑定

类型错误:没有编码的字符串参数

类型错误:没有编码的字符串参数

森栏 2021-05-30 14:19:57
我想将 Json 的压缩 gzip 上传到 Google Storage。我有以下代码:import datalab.storage as storageimport gzippath = prefix + '/orders_newline.json.gz'storage.Bucket('orders').item(path).write_to(gzip.compress(bytes(create_jsonlines(source)),encoding='utf8'), 'application/json')这create_jsonlines(source)是一个返回 Json 换行符分隔的函数。运行此代码给出:TypeError: string argument without an encoding在Python文档说,格式是:bytes([source[, encoding[, errors]]])我不知道我把它理解为不存在如何使用它的例子。我也试过bytes([(create_jsonlines(source))[,encoding='utf8']])这给出了:SyntaxError: invalid syntax我正在运行 Python 3.5
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您没有bytes正确使用该功能。检查一下:


>>> a = "hi"

>>> bytes(a, encoding='utf8')

b'hi'

你可以试试:


bytes((create_jsonlines(source)), encoding='utf8')

encoding是该bytes函数的参数,而您正在该函数之外使用它。


查看完整回答
反对 回复 2021-06-01
?
DIEA

TA贡献1820条经验 获得超2个赞

你可能离答案只有一步之遥。

有关函数用法,请参阅bytesarray()和bytes(您可能需要更改文档的 python 版本)。

它说:

可选的source参数可以通过几种不同的方式用于初始化数组:

  • 如果是字符串,还必须给出编码(和可选的错误)参数;然后,bytearray()使用str.encode()将字符串转换为字节。

  • 如果它是一个整数,则该数组将具有该大小并使用空字节进行初始化。

  • 如果是符合buffer接口的对象,则使用该对象的只读缓冲区来初始化bytes数组。

  • 如果它是可迭代的,则它必须是范围为0 <= x <256的整数的可迭代对象,这些整数用作数组的初始内容。

请注意,方括号表示可以省略这些参数,它不是python语言的数组类型。

因此,您应该使用bytes(create_jsonlines(source), encoding='utf8')


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信