您可以使用 Python Object Notation 模块转储它(pon:免责声明我是该模块的作者)
from pon import PON, loads
data = {
"cats": {
"sphinx": 3,
"british": 2
},
"dogs": {}
}
pon = PON(obj=data)
pon.dump()
给出:
dict(
cats=dict(
sphinx=3,
british=2,
),
dogs=dict( ),
)
这又是正确的 Python,但使用 dict 交换键所需的引号字符串。
您可以使用以下命令再次加载:
read_back = loads(open('file_name.pon').read())
print(read_back)
给予:
{'cats': {'sphinx': 3, 'british': 2}, 'dogs': {}}
请注意loads() 确实不评估字符串,它实际上使用 python 的内置解析器安全地解析它。
PON 还允许您从具有注释条目的文件中加载 python 字典,并在保留 cmets 的同时转储它们。这就是它真正有用的地方。
或者,如果您想要一些更易读的东西,例如 YAML 格式,您可以使用 ruamel.yaml 并执行以下操作:
import ruamel.yaml
ruamel.yaml.round_trip_dump(data, stream=open('file_name.yaml', 'wb'), indent=4)
这会给你一个文件file_name.yaml 的内容:
cats:
sphinx: 3
british: 2
dogs: {}
它使用您似乎更喜欢的缩进(并且比@alberto 的版本更有效)