我想从我拥有的文本文件中创建一个字典,其中的内容是在'字典中?格式。以下是该文件包含的示例:
{' fawn':[1],' sermersheim':[3],' sonji':[2],' scheuring&#39 ;:[2]}
除此之外,它包含125,000个条目。我能够使用read()读取文本文件,但是即使我用
初始化变量,它也会创建文件文本文本的变量dict = {}
答案 0 :(得分:28)
您可以使用eval
内置功能。例如,如果每个字典条目位于不同的行上,这将起作用:
dicts_from_file = []
with open('myfile.txt','r') as inf:
for line in inf:
dicts_from_file.append(eval(line))
# dicts_from_file now contains the dictionaries created from the text file
或者,如果文件只是一个大字典(即使是多行),你可以这样做:
with open('myfile.txt','r') as inf:
dict_from_file = eval(inf.read())
这可能是最简单的方法,但它并不是最安全的。正如其他人在答案中提到的,eval
存在一些固有的安全风险。 JBernardo提到的替代方法是使用比{eval更安全的ast.literal_eval
,因为它只会评估包含文字的字符串。导入eval
模块后,您只需将上述示例中的ast.literal_eval
所有调用替换为ast
。
如果您使用的是Python 2.4,那么您将不会拥有ast
模块,并且您将不会拥有with
语句。代码看起来更像是这样:
inf = open('myfile.txt','r')
dict_from_file = eval(inf.read())
inf.close()
别忘了给inf.close()
打电话。 with
语句的优点在于它们可以为您完成,即使with
语句中的代码块引发异常。
答案 1 :(得分:3)
使用eval
可能会有危险。如果json不起作用,那么我建议使用yaml,它似乎与你的示例输入一起正常工作:
>>> import yaml
>>> yaml.load("{'fawn': [1], 'sermersheim': [3], 'sonji': [2], 'scheuring': [2]}")
{'fawn': [1], 'scheuring': [2], 'sermersheim': [3], 'sonji': [2]}
答案 2 :(得分:2)
答案 3 :(得分:2)
这不是一个生产就绪的解决方案,可能无法与您的文件大小合作,但如果您需要一种简单的方法并且可以将文件添加到
my_dict = {'fawn': [1], 'sermersheim': [3], 'sonji': [2], 'scheuring': [2]}
然后你可以将它重命名为python文件并简单地导入
from my_file import my_dict
答案 4 :(得分:1)
我强烈反对使用eval
。如果您没有对输入文件的完全控制,可能会导致安全问题。只需导入字典并使用json
或pickle
模块保存它们。
答案 5 :(得分:0)
这对我来说就像是json。如果是,请使用 json
模块。
这对我来说就像是yaml。如果是,请使用pyyaml module。 (正如@jcollado所建议的那样)。
您无法使用json
模块,因为它的输入非常严格。