如何在Python中从文件中读取字典数据?

7
我有以下文件dic.txt:
{'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是一个字符串。我无法操作它的值。所以这里有一个问题。如何从dic.txt文件创建一个字典?

文本文件是否包含 Python 字典或 JSON 的字符串表示?编辑:由于 ' 不是有效的 JSON,因此问题已回答。 - Gareth Latty
你为什么不使用pickle来序列化数据呢? - NullUserException
1
这个有帮助吗?看起来相当简单。 https://dev59.com/OnNA5IYBdhLWcg3wX8rk - JMT2080AD
@NullUserException 人类可读性可能很有价值。话虽如此,最好使用像JSON这样的标准化格式。 - Gareth Latty
1
@NullUserException 我没有看到提问者暗示这对他们有价值。两者都有用武之地,没有理由认为在这里使用pickle更合适。 - Gareth Latty
显示剩余2条评论
3个回答

13

你需要解析数据,从一个字符串中获取数据结构。幸运的是,Python 提供了一个函数来安全地解析 Python 数据结构:ast.literal_eval() 。例如:

import ast

...

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

4

您可以使用Python内置的eval()函数:

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

-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("'", '"')

3
由于 ' 不是有效的 JSON,因此这不是 JSON,那么为什么要使用不为此工作而设计的工具? - Gareth Latty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接