如何以人类可读的方式将 python 字典序列化为文本?
How to serialize a python dict to text, in a human-readable way?
我有一个 python dict
,它的键和值是字符串、整数和其他字典和元组 (json does not support those)。我想将它保存到一个文本文件中,然后从文件中读取它。
基本上,我想要一个 read
counterpart to the built-in print
(就像在 Lisp 中一样)。
限制条件:
- 文件必须是人类可读的(因此 pickle 出局)
- 无需检测循环。
还有比json更好的吗?
您可以在 dict
上使用 repr()
,然后读回并用 ast.literal_eval()
解析它。它与 Python 本身一样易于阅读。
示例:
In [1]: import ast
In [2]: x = {}
In [3]: x['string key'] = 'string value'
In [4]: x[(42, 56)] = {'dict': 'value'}
In [5]: x[13] = ('tuple', 'value')
In [6]: repr(x)
Out[6]: "{(42, 56): {'dict': 'value'}, 'string key': 'string value', 13: ('tuple', 'value')}"
In [7]: with open('/tmp/test.py', 'w') as f: f.write(repr(x))
In [8]: with open('/tmp/test.py', 'r') as f: y = ast.literal_eval(f.read())
In [9]: y
Out[9]:
{13: ('tuple', 'value'),
'string key': 'string value',
(42, 56): {'dict': 'value'}}
In [10]: x == y
Out[10]: True
您也可以考虑使用 pprint
模块以获得更友好的格式化输出。
老实说,json 是你的答案[编辑:只要键是字符串,就没有看到关于字典作为键的部分],这就是它在至少 5 年内被接管的原因。 json 有哪些易读性问题?有大量 json 压头、漂亮的打印机实用程序、浏览器插件 [1][2] - 使用它们,它当然是人类可读的。 json(/simplejson) 也非常高效(C 实现),它可以扩展,可以串行处理,这不能说是 AST 方法(为什么偏心并破坏可扩展性?) .
这似乎也是 100% 在这里回答你的人的共识...每个人都不会错 ;-) XML 死了,很好的摆脱。
- How can I pretty-print JSON? 和无数其他人
- Browser JSON Plugins
我有一个 python dict
,它的键和值是字符串、整数和其他字典和元组 (json does not support those)。我想将它保存到一个文本文件中,然后从文件中读取它。
基本上,我想要一个 read
counterpart to the built-in print
(就像在 Lisp 中一样)。
限制条件:
- 文件必须是人类可读的(因此 pickle 出局)
- 无需检测循环。
还有比json更好的吗?
您可以在 dict
上使用 repr()
,然后读回并用 ast.literal_eval()
解析它。它与 Python 本身一样易于阅读。
示例:
In [1]: import ast
In [2]: x = {}
In [3]: x['string key'] = 'string value'
In [4]: x[(42, 56)] = {'dict': 'value'}
In [5]: x[13] = ('tuple', 'value')
In [6]: repr(x)
Out[6]: "{(42, 56): {'dict': 'value'}, 'string key': 'string value', 13: ('tuple', 'value')}"
In [7]: with open('/tmp/test.py', 'w') as f: f.write(repr(x))
In [8]: with open('/tmp/test.py', 'r') as f: y = ast.literal_eval(f.read())
In [9]: y
Out[9]:
{13: ('tuple', 'value'),
'string key': 'string value',
(42, 56): {'dict': 'value'}}
In [10]: x == y
Out[10]: True
您也可以考虑使用 pprint
模块以获得更友好的格式化输出。
老实说,json 是你的答案[编辑:只要键是字符串,就没有看到关于字典作为键的部分],这就是它在至少 5 年内被接管的原因。 json 有哪些易读性问题?有大量 json 压头、漂亮的打印机实用程序、浏览器插件 [1][2] - 使用它们,它当然是人类可读的。 json(/simplejson) 也非常高效(C 实现),它可以扩展,可以串行处理,这不能说是 AST 方法(为什么偏心并破坏可扩展性?) .
这似乎也是 100% 在这里回答你的人的共识...每个人都不会错 ;-) XML 死了,很好的摆脱。
- How can I pretty-print JSON? 和无数其他人
- Browser JSON Plugins