簡體   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