繁体   English   中英

Python:使用字典格式从文本/文件创建字典

[英]Python: Create Dictionary from Text/File that's in Dictionary Format

我想从我拥有的文本文件中创建一个字典,其内容是“字典”格式。 以下是该文件包含的示例:

{'fawn':[1],'sermersheim':[3],'sonji':[2],'scheuring':[2]}

除此之外,它包含125,000个条目。 我能够使用read()读取文本文件,但是即使我用变量初始化变量,它也会创建文件的文本文本的变量

dict = {}

您可以使用内置的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提到的替代方法是使用ast.literal_eval ,它比eval更安全,因为它只会评估包含文字的字符串。 在导入ast模块后,您可以使用ast.literal_eval简单地将上述示例中对eval所有调用替换为。

如果你使用的是Python 2.4,你不会有ast模块,并且你不会有with报表。 代码看起来更像是这样的:

inf = open('myfile.txt','r')
dict_from_file = eval(inf.read())
inf.close()

别忘了打电话给inf.close() with语句的优点是它们可以为您完成,即使with语句中的代码块引发异常。

使用eval可能很危险。 如果json不起作用,那么我建议使用yaml ,它似乎与你的示例输入一起正常工作:

>>> import yaml
>>> yaml.load("{'fawn': [1], 'sermersheim': [3], 'sonji': [2], 'scheuring': [2]}")
{'fawn': [1], 'scheuring': [2], 'sermersheim': [3], 'sonji': [2]}

它不是一个生产就绪的解决方案,可能不适合你的大小的文件,但如果你需要一个简单的方法,可以添加你的文件到

my_dict = {'fawn': [1], 'sermersheim': [3], 'sonji': [2], 'scheuring': [2]}

然后你可以将它重命名为python文件,然后只需导入

from my_file import my_dict 

使用eval函数。

例如,

dict = eval(open("yourfile.txt").read())

我强烈反对使用eval 如果您没有对输入文件的完全控制,可能会导致安全问题。 只需导入您的字典并使用jsonpickle模块保存它们。

这对我来说就像是json。 如果是这样,请使用 json模块。

这对我来说就像是yaml。 如果是这样,请使用pyyaml模块 (正如@jcollado所建议的那样)。

您不能使用json模块,因为它对输入很严格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM