试图从文本文件中读取字典

时间:2018-04-18 07:51:21

标签: python

我有一个包含这样字典的文本文件 -

account1 = {'email':'abc@test1', 'password':'abc321', 'securitycode':546987, 'name':'tester1', 'phone':236945744 }

account2 = {'email':'abc@test2.com', 'password':'abc123', 'securitycode':699999, 'name':'tester2', 'phone':666666666666 }

我尝试使用此代码读取这些词典值 -

dicts_from_file = []
with open('account.txt','r') as inf:
  dict_from_file = eval(inf.read())


print (dicts_from_file)

但是我得到了这个追溯 -

Traceback (most recent call last):
File "C:\Python\Dell_test.py", line 15, in <module>
dict_from_file = eval(inf.read())
File "<string>", line 2
{'email':'abc@test2.com', 'password':'abc123', 'securitycode':699999, 
'name':'tester2', 'phone':666666666666 }
^
SyntaxError: invalid syntax

有人可以帮助并指导这个片段的错误吗?

2 个答案:

答案 0 :(得分:0)

这是hacky解决方案,使用imp模块:

import imp

accounts = imp.load_source('accounts', 'account.txt')

from accounts import *

print(accounts1)
# {'email':'abc@test1', 'password':'abc321', 'securitycode':546987, 'name':'tester1', 'phone':236945744 }

但是,对于将来,我建议您不要使用此文件格式)

答案 1 :(得分:0)

正如其他人所说,你应该使用序列化格式,但假设这不受你的控制,有很多方法可以做到这一点。

由于你有有效的python代码,最简单的方法就是导入它。首先将文件从account.txt重命名为account.py - 或类似名称,只要它具有.py后缀。

如果您刚刚导入了模块,那么您将不知道帐户名称,假设这些是随机的,您需要保留它们。他是将他们列入名单的一种方式:

import account

dicts_from_file = [account.__dict__[i] for i in dir(account) if not i.startswith("__")]
print(dicts_from_file)

可能更有用,在一个字典中,帐户名是键:

import account
import pprint

dict_names = [i for i in dir(account) if not i.startswith("__")]
dicts_from_file = {i:account.__dict__[i] for i in dict_names}
pprint.pprint(dicts_from_file)

给出:

{'account1': {'email': 'abc@test1',
              'name': 'tester1',
              'password': 'abc321',
              'phone': 236945744,
              'securitycode': 546987},
 'account2': {'email': 'abc@test2.com',
              'name': 'tester2',
              'password': 'abc123',
              'phone': 666666666666,
              'securitycode': 699999}}