2012-12-10 72 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} 
    >>>