将文本文件中的行读入python词典的最佳方法

时间:2015-06-03 07:16:34

标签: python dictionary

我有一个超过15k行的文件,每行有1个键和1个值。如果需要更快的阅读格式,我可以修改文件内容。目前我已经把整个文件做成dict并且做了评估这是阅读文件的最佳方式,或者我们可以遵循任何更好的方法,请建议。 文件mymapfile.txt:

{
'a':'this',
'b':'that',
.
.
.
.
'xyz':'message can have "special" char %s etc '
}

并且在这个文件上我正在做eval

f_read = eval(open('mymapfile.txt', 'r').read())

我担心的是我的档案不断增长,价值观可以有报价,特殊字符等我们需要包装价值''''或"""。使用字典格式即使语法错误,eval也会失败。那么使用readlines()而不将文件作为dict更好,如果我们在文件中创建dict,那么创建dict或eval会更快吗?对于readlines,我可以简单地在每行中分割文本:并且不必担心任何特殊字符

readlines文件:

a:this
b:that
.
.
.
.
xyz:message can have "special" char %s etc

3 个答案:

答案 0 :(得分:1)

@ Mahesh24 answer返回一个值看起来像dict但不是dict的集合。他的变量也会覆盖内置词典。而是使用两行:

s={ (i.strip())  for i in open('ss.txt','r').readlines() }
d = {i.split(':')[0]:i.split(':')[1] for i in s}
然后,

d将带有读入值的dict。一点点思考可能会把这变成一个班轮。非常肯定在python标准库中有读取csv,它将为您提供更多选项和健壮性。如果您的数据采用任何其他标准格式,则使用适当的标准库将是优先的。然而,上述两个衬垫将为您提供快速而肮脏的方式。可以为逗号或数据分隔符更改“:”。

答案 1 :(得分:0)

假设您坚持使用json,您可能需要查看ultrajson。在转储和加载数据时似乎非常快(即使存在内存损失)。

以下是两篇有一些基准的文章,可能会帮助您做出决定:

https://medium.com/@jyotiska/json-vs-simplejson-vs-ujson-a115a63a9e26

http://jmoiron.net/blog/python-serialization/

答案 2 :(得分:-1)

如果您只想加载数据,请避免使用eval

您只需要读取行,识别键和值,以便建议的文件格式:

a:this
b:that
...

完全合适。