我有一个包含这样字典的文本文件 -
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
有人可以帮助并指导这个片段的错误吗?
答案 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}}