我有一个python dict
,其键和值是字符串,整数和其他dicts和元组(json does not support those)。我想将其保存到文本文件,然后从文件中读取它。
基本上,我想要内置read
的print
对应物(就像在Lisp中一样)。
约束:
答案 0 :(得分:8)
您可以在repr()
上使用dict
,然后将其重新读入并使用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
模块来获得更友好的格式化输出。
答案 1 :(得分:1)
老实说,json是你的答案[编辑:只要键是字符串,没有看到关于dicts作为键的部分],这就是为什么它在至少5年内被接管的原因。 json有什么易读性问题?有大量的json压头,漂亮的打印机实用程序,浏览器插件[1] [2] - 使用它们,它肯定是人类可读的。 json(/ simplejson)也是非常高性能的(C实现),并且它可以进行扩展,并且可以按顺序处理,这对于AST方法来说是不可能的(为什么要偏心并破坏可伸缩性?)。
这也似乎是100%在这里回答你的人的共识......每个人都不能错;-) XML已经死了,很好的摆脱。