我想将 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函数的参数,而您正在该函数之外使用它。
DIEA
TA贡献1820条经验 获得超2个赞
你可能离答案只有一步之遥。
有关函数用法,请参阅bytesarray()和bytes(您可能需要更改文档的 python 版本)。
它说:
可选的source参数可以通过几种不同的方式用于初始化数组:
如果是字符串,还必须给出编码(和可选的错误)参数;然后,bytearray()使用str.encode()将字符串转换为字节。
如果它是一个整数,则该数组将具有该大小并使用空字节进行初始化。
如果是符合buffer接口的对象,则使用该对象的只读缓冲区来初始化bytes数组。
如果它是可迭代的,则它必须是范围为0 <= x <256的整数的可迭代对象,这些整数用作数组的初始内容。
请注意,方括号表示可以省略这些参数,它不是python语言的数组类型。
因此,您应该使用bytes(create_jsonlines(source), encoding='utf8')
。
添加回答
举报
0/150
提交
取消