我有一个.txt文件,保存方式如下:{(‘A’,0(:-1,(‘A‘,1(:-1、(‘A,2(:0、(‘B’,0如果你像这样编码dict = {('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0}
,它应该变成dict但是,如果将文件中的文本导入到字符串中,使该字符串成为原始文本(就像txtfromfile = "{('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0}"
和我这样做dict = txtfromfile
使dict成为字符串。有没有办法把它变成dict而不是string?
您可以使用ast
内置模块中的literal_eval
函数:
import ast
with open("myfile.txt", "r") as fp:
mydict = ast.literal_eval(fp.read())
json.loads(text)
将发挥作用。https://docs.python.org/3/library/json.html
编辑:从注释中了解到eval
不应用于此操作。此处解释。正确的解决方案是建议CCD_ 8的答案。
您可以不应使用以下内容评估文本:
txtfromfile = "{('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0}"
my_dict = eval(txtfromfile)
print(my_dict)
输出:
{('A', 0): -1, ('A', 1): -1, ('A', 2): 0, ('B', 0): -1, ('B', 1): 0, ('B', 2): 0, ('C', 0): 0, ('C', 1): 0, ('C', 2): 0}