我正在尝试通过添加逗号分隔的括号来格式化json格式的数据集。目标是将其导出到csv。对于某些记录,数据集在某些字段中有漏洞,如果我直接导入它,我会收到错误。
我有这条线
data_json_str = "[" + ','.join(data) + "]"
但是我收到了这个错误
TypeError Traceback (most recent call last)
<ipython-input-4-923cc05f5de6> in <module>()
----> 1 data_json_str = "[" + ','.join(data) + "]"
TypeError: sequence item 0: expected str instance, bytes found
答案 0 :(得分:0)
我猜你正在使用Python 3。
在Python 3中,有两种字符串格式:str (sequences of Unicode code points)和bytes (sequences of bytes)。出于某种原因(比如以二进制模式读取文件),您最终使用bytes
而不是data
对象中的字符串。这些既不能用作','.join
的参数,也不能传递给json.dumps
:
>>> data = [b'abc', b'def']
>>> data_json_str = "[" + ','.join(data) + "]"
Traceback (most recent call last):
File "python", line 1, in <module>
TypeError: sequence item 0: expected str instance, bytes found
>>> import json
>>> json.dumps(data)
Traceback (most recent call last):
File "python", line 1, in <module>
TypeError: b'abc' is not JSON serializable
您必须先将字节转换为unicode字符串。如果您已经知道编码(通常是UTF-8),您可以编写例如:
>>> data = [d.decode('utf-8') for d in data]
>>> data
['abc', 'def']
然后使用字符串连接或(最好)the JSON library将它们转换为JSON字符串。
编辑:从文件中读取的数据可能以字节而不是Unicode保存的一个原因是当您从设置了二进制标志的文件中读取时,即open(filename, 'rb')
而不是open(filename 'r')
with open('data.txt', 'r') as f:
data = f.readlines()
。有关如何在读取文件时更改默认编码的详细信息,请参阅the open
function reference。
因此,在最佳情况下,数据从文本文件读取为Unicode字符串:
import json
print(json.dumps(data))
然后转换为json:
while (t <= 1f)