1

如何獲得Python 源代碼內存中的Python字典的表示?如何將Python內存字典作爲Python源代碼保存到文件中?

我決定讀托馬斯Kluyver的comment上搶Galanakis'題爲Why bother with python and config files?在他的評論的博客文章後問這個問題托馬斯指出

但是,如果你想要的任何方式改變應用 內設置(如首選項對話框),沒有好的方法來自動編寫一個正確的Python文件 。

+0

你的意思是在文件中使用'.py'文件'a_dict = {'key1':'value1'}'在裏面,或者是低級別的文件? – TankorSmash 2012-07-21 17:27:08

+0

我認爲Kluyver只是意味着沒有什麼內置於Python來完成它,而不是它無法完成(也不是很難)。 – martineau 2012-07-21 17:32:08

+0

@martineau伊格納西奧的回答如何? – 2012-07-21 17:32:48

回答

4

假設它僅使用「基本」的Python類型,你可以寫出來的結構repr(),然後用ast.literal_eval()讀回在後。

+0

不能保證'repr'會產生正確的Python源代碼,對吧? – 2012-07-21 17:35:09

+0

不會。如果只有基本類型(字符串,字典,列表,整數等),但不是,例如,如果您定義了自己的類並嘗試保存其實例,則不會。 – 2012-07-21 17:39:37

+0

如果內容僅由基本類型組成,則會生效。 – 2012-07-21 17:39:47

1

正如文章說,你最好使用JSON/YAML或其他格式,但如果你認真想用Python字典和只使用基本的Python類型...

寫出(嘗試使用pformat,試圖使其更可讀):

from pprint import pformat # instead of using repr() 

d = dict(enumerate('abcdefghijklmnopqrstuvwxyz')) 
open('somefile.py').write(pformat(d)) 

回讀

from ast import literal_eval 
d = literal_eval(open('somefile.py').read()) 
+0

_正如文章所述,您最好使用JSON/YAML或其他格式_並非如此,文章完全相反:) – 2012-07-21 17:47:43