2012-12-10 71 views
1

我有以下文件dic.txt:如何從python中的文件讀取字典數據?

{'a':0, 'b':0, 'c':0, 'd':0} 

我想讀其內容,並作爲字典使用。輸入新的數據值後,我需要將它們寫入該文件。基本上我需要一個腳本來處理字典,更新它的值並保存起來以備後用。

我有一個工作腳本,但無法弄清楚如何實際讀取腳本中的變量dic.txt的內容。因爲當我嘗試這個:

file = '/home/me/dic.txt' 
dic_list = open(file, 'r') 
mydic = dic_list 
dic_list.close() 

我得到的mydic是一個str。我無法操縱它的價值。所以這是一個問題。如何從dic.txt創建字典?

+0

是否文本文件包含一個Python的字符串表示字典或JSON?編輯:''是無效的JSON,所以問題回答。 –

+0

有什麼理由不使用[pickle](http://docs.python.org/2/library/pickle.html)來序列化東西? – NullUserException

+0

這有幫助嗎?看起來很簡單。 http://stackoverflow.com/questions/988228/converting-a-string-to-dictionary – JMT2080AD

回答

6

您需要解析數據以從字符串中獲取數據結構,幸運的是,Python提供了一種安全解析Python數據結構的函數:ast.literal_eval()。例如:

import ast 

... 

with open("/path/to/file", "r") as data: 
    dictionary = ast.literal_eval(data.read()) 
+0

糟糕,我錯過了文件中的單引號和雙引號。你是對的,這需要'literal_eval',而不是JSON。 –

+0

@ sr2222我最初也錯過了它們。 –

+0

謝謝Lattyware,這作品的魅力。 – minerals

-1
>>> import json 
>>> json.loads('{"a":0, "b":0, "c":0, "d":0}') 
{u'a': 0, u'c': 0, u'b': 0, u'd': 0} 

所以

with open('/path/to/file', 'r') as f: 
    d = json.loads(f.read().replace("'", '"') 
+1

由於''不是有效的JSON,它不能是JSON,那麼爲什麼要使用不是爲這項工作而設計的工具呢? –

1

您可以使用Python內置函數eval():

>>> mydic= "{'a':0, 'b':0, 'c':0, 'd':0}" 
    >>> eval(mydic) 
    {'a': 0, 'c': 0, 'b': 0, 'd': 0} 
    >>>