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

我想将 Json 的压缩 gzip 上传到 Google Storage。


我有以下代码:


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 encoding

在Python文档说,格式是:bytes([source[, encoding[, errors]]])我不知道我把它理解为不存在如何使用它的例子。


我也试过


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

这给出了:


SyntaxError: invalid syntax

我正在运行 Python 3.5


森栏
浏览 176回答 3
3回答

慕田峪4524236

您没有bytes正确使用该功能。检查一下:>>> a = "hi">>> bytes(a, encoding='utf8')b'hi'你可以试试:bytes((create_jsonlines(source)), encoding='utf8')encoding是该bytes函数的参数,而您正在该函数之外使用它。

DIEA

你可能离答案只有一步之遥。有关函数用法,请参阅bytesarray()和bytes(您可能需要更改文档的 python 版本)。它说:可选的source参数可以通过几种不同的方式用于初始化数组:如果是字符串,还必须给出编码(和可选的错误)参数;然后,bytearray()使用str.encode()将字符串转换为字节。如果它是一个整数,则该数组将具有该大小并使用空字节进行初始化。如果是符合buffer接口的对象,则使用该对象的只读缓冲区来初始化bytes数组。如果它是可迭代的,则它必须是范围为0 <= x <256的整数的可迭代对象,这些整数用作数组的初始内容。请注意,方括号表示可以省略这些参数,它不是python语言的数组类型。因此,您应该使用bytes(create_jsonlines(source), encoding='utf8')。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python