繁体   English   中英

如何以人类可读的方式将python dict序列化为文本?

[英]How to serialize a python dict to text, in a human-readable way?

我有一个python dict其键和值是字符串,整数和其他dicts和元组( json不支持这些 )。 我想将其保存到文本文件,然后从文件中读取它。 基本上,我想read对口内置print (如在Lisp语言)。

约束:

  1. 该文件必须是人类可读的(因此pickle已经出来)
  2. 无需检测圆形。

还有比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是你的答案[编辑:只要键是字符串,没有看到关于dicts作为键的部分],这就是为什么它在至少5年内被接管的原因。 json有什么易读性问题? 有大量的json压头,漂亮的打印机实用程序,浏览器插件[1] [2] - 使用它们,它肯定是人类可读的。 json(/ simplejson)也是非常高性能的(C实现),它可以扩展,并且可以串行处理,这对于AST方法来说是不可能的(为什么要偏心和破坏可伸缩性?)。

这也似乎是100%在这里回答你的人的共识......每个人都不能错;-) XML已经死了,很好的摆脱。

  1. 我怎样才能打印JSON? 和无数其他人
  2. 浏览器JSON插件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM