当文本文件中包含多个键和值时,我正在从文本文件中创建字典时,出现此错误“ ValueError:太多值无法解包(预期2)”。
database = {} #creates an empty dictionary
with open("file.txt", "r") as infile: #opens the dictionary
for line in infile: #for each line
name, ask = line.strip().split(':')
database[name] = (ask)
name = input('Enter username: ')
ask = input('Enter pin: ')
if name in database:
if ask in database[name]:
print('Welcome', name)
else:
database.update( {name : ask} )
print(database)
else:
database.update( {name : ask} )
print(database)
with open('file.txt', 'w') as file:
file.write(json.dumps(database)) #updates the text file with the new databse
我希望程序运行时,无论输入哪个键,文本文件中都有多个键和值可以运行。但是,如果文件中的键/值超过1个,则文本文件无法解压缩
答案 0 :(得分:1)
检查 file.txt 文件中的所有行。在某些情况下,“:”的出现可能不止一个。既然如此,您要将列表拆成两个变量。如果第4行的结果列表中有两个以上的值,即line.strip()。split(“:”),则会引发异常。
答案 1 :(得分:0)
使用pythons函数eval
,您可以将从文件中读取的字符串解析为字典。然后您可以将其写入字典
with open("file.txt", "r") as infile: #opens the dictionary
for line in infile: #for each line
entry = eval(line)
database[entry["name"]] = entry["man"]
答案 2 :(得分:0)
尝试一下
import ast
with open("file.txt", "r") as infile: #opens the dictionary
for line in infile: #for each line
eval_dict = ast.literal_eval(line) # This gives you a dictionary
database[name] = eval_dict["name"]
注意:
根据@jaggers评论
我考虑过文本文件中的{"name" : "hello", "man" : "mane"}
行。
答案 3 :(得分:0)
您的代码打开文件,然后逐行对其进行迭代。 如果与您对原始问题的评论完全相同,则第一行 为:
{"name" : "hello", "man" : "mane"}
无法在您的代码中解析。
如果您的文件不是此格式:
"name":"hello"
"man":"mane"
(换行符是隐式的),它将正常工作。
错误似乎是您正在考虑将看起来像Python字典的文本文件自动地由Python解析为字典:不会,这就是为什么您在此处得到其他答案的原因,建议使用eval ()或类似名称为您解析。
您可能要考虑使用json模块读取和写入类似字典的文件。
hth
答案 4 :(得分:0)
为什么不只使用简单的json文件?
with open("file.txt", "r") as infile:
database = json.loads(infile.read())