如何将存储在字典中的 JSON 数据 data
写入文件?
f = open('data.json', 'wb')
f.write(data)
这给出了错误:
类型错误:必须是字符串或缓冲区,而不是字典
原文由 user1530318 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何将存储在字典中的 JSON 数据 data
写入文件?
f = open('data.json', 'wb')
f.write(data)
这给出了错误:
类型错误:必须是字符串或缓冲区,而不是字典
原文由 user1530318 发布,翻译遵循 CC BY-SA 4.0 许可协议
要在 Python 2 的接受答案中获取 utf8 编码文件而不是 ascii 编码文件,请使用:
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
Python 3 中的代码更简单:
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
在 Windows 上, encoding='utf-8'
参数 open
仍然是必需的。
为了避免在内存中存储数据的编码副本( dumps
的结果)并在 Python 2 和 3 中输出 utf8 编码的 字节串,请使用:
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
codecs.getwriter
调用在 Python 3 中是多余的,但对于 Python 2 是必需的
可读性和大小:
ensure_ascii=False
的使用提供了更好的可读性和更小的尺寸:
>>> json.dumps({'price': '€10'})
'{"price": "\\u20ac10"}'
>>> json.dumps({'price': '€10'}, ensure_ascii=False)
'{"price": "€10"}'
>>> len(json.dumps({'абвгд': 1}))
37
>>> len(json.dumps({'абвгд': 1}, ensure_ascii=False).encode('utf8'))
17
通过向 dump
或 dumps
的参数添加标志 indent=4, sort_keys=True
(如 dinos66 建议的那样)进一步提高可读性。这样,您将在 json 文件中获得一个很好的缩进排序结构,但代价是文件大小稍大。
原文由 Antony Hatchkins 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答862 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
data
是一个 Python 字典。在写入之前需要将其编码为JSON。使用它以获得最大兼容性(Python 2 和 3):
在现代系统(即 Python 3 和 UTF-8 支持)上,您可以使用以下方法编写更好的文件:
请参阅
json
文档。