1. ホーム
  2. python

[解決済み】TypeError: エンコードされていない文字列引数

2022-02-01 12:57:51

質問

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 Newline Delimitedを返す関数です。

このコードを実行すると

TypeError: string argument without an encoding

Pythonドキュメント によると、フォーマットは bytes([source[, encoding[, errors]]]) 使い方の例がないので、よくわからないのですが。

私もやってみました

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

これは、以下を意味します。

SyntaxError: invalid syntax

Python 3.5を使用しています。

解決方法は?

を使用していない。 bytes 関数が正しく動作していることを確認します。これを確認してください。

>>> a = "hi"
>>> bytes(a, encoding='utf8')
b'hi'

試してみるといい。

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

encoding は、引数の bytes 関数の外部で使用していることになります。