2016-04-28 34 views
3

中定義的文件我想知道是否有一種方法來輸出一個字典到一個文件完全一樣,因爲它將被定義爲一個變量?輸出一個字典文件完全按照變量

因此,如果在代碼中,它看起來像:

dict1 = {01: 'val1', 02: 'val2', 03: 'val3'} 

該文件的內容將看起來相同?

所以文件包含:

dict1 = {01: 'val1', 02: 'val2', 03: 'val3'} 

我聽說過pickle和JSON,但我非常希望能夠從一個模塊導入,即

from some_module import some_dict 

這可能嗎?

+0

你爲什麼害怕進口? – e4c5

+0

害怕進口?請詳細說明? – JONAS402

回答

4

只需使用內置repr(...)功能將對象轉換爲字符串以這種方式所得到的字符串是有效的文字與您可以重建目的。

它調用其參數__repr__()方法,該方法至少爲最常見的基本數據類型生成有效文字。它不會對大多數其他對象的工作,雖然:

dict1 = {1: 'val1', 2: 'val2', 3: 'val3'} 
literal = repr(dict1) 

print(literal) 
# Output: {1: 'val1', 2: 'val2', 3: 'val3'} 

現在你可以存儲在一個Python文件:

with open("my_dict.py", "w") as f: 
    print("dict2 = " + literal, file=f) 

這是現在導入的來自同一文件夾內的其他Python腳本模塊:

import my_dict 
print(my_dict.dict2[2]) 
# Output: val2 

或者,如果你不想每次使用模塊名,用from導入:

from my_dict import dict2 
print(dict2[2]) 
# Output: val2 
+1

完美!就像@ByteCommander一如既往的幫助和信息! – JONAS402

+0

謝謝,不要忘記接受答案。 :) –

0

我不認爲這是可能的。導入用於導入模塊,而不是文件。您需要閱讀並處理文件才能使其工作。您可以在字典寫入一個文件,例如:

output = "dict1 = "+str(dict1) 
f.write(output) 
+0

我以前用列表完成了這個工作,不確定是否可以用字典? – JONAS402

+0

是的,當你將它寫入文件時,它不再是字典。它是字典的字符串表示形式。你可以寫一個字符串到一個文件,所以這是可能的。 –

0

您可以使用globals()函數實現對象名稱,該函數向您顯示模塊當前狀態的字典。但這不是一個好方案,您應該使用數據的序列化,也許通過JSON。