我想上传压缩的gzip的Json到谷歌存储。
我有这样的代码:
import datalab.storage as storage
import gzip
path = 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 encodingPython docs说格式是:bytes([source[, encoding[, errors]]]),我不确定我是否理解它,因为没有示例说明如何使用它。
我也试过了
bytes([(create_jsonlines(source))[,encoding='utf8']])这提供了:
SyntaxError: invalid syntax我正在运行Python 3.5
发布于 2018-08-22 15:22:17
您没有正确使用bytes函数。请检查以下内容:
>>> a = "hi"
>>> bytes(a, encoding='utf8')
b'hi'您可以尝试:
bytes((create_jsonlines(source)), encoding='utf8')encoding是bytes函数的参数,您可以在该函数外部使用它。
发布于 2018-08-22 15:19:46
你可能离答案只有一步之遥了。
有关函数的用法,请参阅bytearray()和bytes (您可能需要更改文档的python版本)。
上面写着:
可选的source参数可用于以几种不同的方式初始化数组:
如果它是一个字符串,你还必须给出
请注意,方括号表示可以省略这些参数,它不是python语言的数组类型。
所以你应该使用bytes(create_jsonlines(source), encoding='utf8')。
发布于 2019-08-07 13:33:33
当您阅读任何python函数文档时,
bytes([source[, encoding[, errors]]])方括号表示这些参数是可选的。另一个中的多个方括号意味着它们是下一级别的期权参数。例如
bytes([source....这意味着我们可以将字节调用为byes()本身,因为[source]在这里是可选的
bytes() -> empty bytes objectbytes(22)这里22是作为源代码传递的
有关字节及其参数的更多详细信息,请阅读本文
https://stackoverflow.com/questions/51961386
复制相似问题