Python 从文本文件中获取词典

Python 从文本文件中获取词典,python,json,python-3.x,dictionary,Python,Json,Python 3.x,Dictionary,我在一个名为“Dict.txt”的文本文件中存储了一本字典,如下所示: [{1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 15: 0}] 我有一些代码可以把这个文件转换成字典: import json, ast file = open('Dict.txt', 'r') save = file.read() file.close() for func in (ast.literal_eval, json.

我在一个名为“Dict.txt”的文本文件中存储了一本字典,如下所示:

[{1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 15: 0}]
我有一些代码可以把这个文件转换成字典:

import json, ast

file = open('Dict.txt', 'r')
save = file.read()
file.close()
for func in (ast.literal_eval, json.loads):
    file = func(save)
file = file[0]
但是当我运行代码时,我得到了错误:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

我不习惯使用字典、json或ast。所以我知道为什么会发生这种情况,非常感谢您的帮助。

这不是有效的JSON,因为最外层的结构是列表,而不是dict,键是数字而不是字符串。您仍然可以这样使用literal_eval:

file = open('Dict.txt', 'r')
your_list_with_a_dict = ast.literal_eval(file.read())
your_dict = your_list_with_a_dict[0]
file.close()

这不是有效的JSON,因为最外层的结构是列表,而不是dict,键是数字而不是字符串。您仍然可以这样使用literal_eval:

file = open('Dict.txt', 'r')
your_list_with_a_dict = ast.literal_eval(file.read())
your_dict = your_list_with_a_dict[0]
file.close()

从文件中读取数据时,可以使用
literal\u eval
。因此,您可以简单地执行以下操作:

test.txt的内容

[{1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 15: 0}]
读取文件并以所需数据结构输出的代码:

from ast import literal_eval
data = []
with open('test.txt') as a:
    data = literal_eval(a.read())
print(data)
输出:

[{1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 15: 0}]

从文件中读取数据时,可以使用
literal\u eval
。因此,您可以简单地执行以下操作:

test.txt的内容

[{1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 15: 0}]
读取文件并以所需数据结构输出的代码:

from ast import literal_eval
data = []
with open('test.txt') as a:
    data = literal_eval(a.read())
print(data)
输出:

[{1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 15: 0}]

正则表达式是您最好的朋友:)


正则表达式是您最好的朋友:)


这是可行的,但如果我有一个数组,它只打开第一项。我将如何执行此操作?您的带有dict[0]的\u列表\u只取出第一项。您想如何处理其余的项目?您也可以只使用
ast.literal\u eval(file.read())
的结果,就在那里。谢谢您的帮助!我只是想知道,你所说的“信任输入”是什么意思?这是可行的,但如果我有一个数组,它只打开第一项。我将如何执行此操作?您的带有dict[0]的\u列表\u只取出第一项。您想如何处理其余的项目?您也可以只使用
ast.literal\u eval(file.read())
的结果,就在那里。谢谢您的帮助!我只是想知道,你说的“相信输入”是什么意思?