我的程序只能识别 pickle 文件中的第一对值
My program can only recognize the first pair of values in a pickle file
我的程序是我正在开发的基本用户名密码系统。它允许您将用户名和密码存储在 pickle 文件中,然后使用它登录。但是,只有我在文件中创建的第一个“帐户”有效。我看过类似的问题,但 none 的解决方案似乎有效。有什么我做错了,或者需要添加以便所有帐户都能正常工作吗? 我已经解码了pickle文件,所有的账号都在 我是一个初级程序员,所以请简单说明一下。这是我的代码:
import pickle
import sys
l=0
answer="."
c=0
while c==0:
if not answer=="y" or not answer=="yes" or not answer=="Yes" or not answer=="n" or not answer=="No" or not answer=="no":
answer=input("have you already created an account?(y/n)")
if answer=="n" or answer=="no" or answer=="No" or answer=="y" or answer=="yes" or answer=="Yes":
c=1
if answer=="n" or answer=="no" or answer=="No":
p=1
while p==1:
UsernameSet=input("What will your username be? ")
fh = open("list.pkl", 'rb')
try:
Usernameport = pickle.load(fh)
except EOFError:
Usernameport = "."
if not (UsernameSet in Usernameport):
p=2
fh.close()
j=1
while j==1:
PasswordSet=input("What will your password be? ")
fh = open("list.pkl", 'rb')
try:
Passwordport = pickle.load(fh)
except EOFError:
Passwordport = "."
if not (PasswordSet in Passwordport):
if PasswordSet == UsernameSet:
print("Your username and password cannot be the same")
else:
j=2
print("You have created an account. please reload")
fh.close()
importthing = (UsernameSet,PasswordSet)
fh = open("list.pkl", 'ab')
pickle.dump(importthing, fh)
fh.close()
if answer=="y" or answer=="yes" or answer=="Yes":
p=1
while p==1:
Usernamething=input("Username: ")
fh = open("list.pkl", 'rb')
Usernamestuff = pickle.load(fh)
if (Usernamething in Usernamestuff):
p=2
l=Usernamething
fh.close()
j=1
while j==1:
Passwordthing=input("Password: ")
fh = open("list.pkl", 'rb')
Passwordstuff = pickle.load(fh)
if (Passwordthing in Passwordstuff):
j=2
print("you have logged in")
sys.exit()
fh.close()
请在 Pickle dump replaces current file data 查看 abarnert 的回答:
"当你将新的转储附加到同一个文件时,你最终会得到一个由多个独立值组成的文件。如果你只调用一次加载,它只会加载第一个。如果你想加载所有这些,您需要编写执行此操作的代码。例如,您可以循环加载直到 EOFError。"
def Load():
d = {}
with open('test.pkl', 'rb') as f:
while True:
try:
a = pickle.load(f)
except EOFError:
break
else:
d.update(a)
# do stuff with d
我的程序是我正在开发的基本用户名密码系统。它允许您将用户名和密码存储在 pickle 文件中,然后使用它登录。但是,只有我在文件中创建的第一个“帐户”有效。我看过类似的问题,但 none 的解决方案似乎有效。有什么我做错了,或者需要添加以便所有帐户都能正常工作吗? 我已经解码了pickle文件,所有的账号都在 我是一个初级程序员,所以请简单说明一下。这是我的代码:
import pickle
import sys
l=0
answer="."
c=0
while c==0:
if not answer=="y" or not answer=="yes" or not answer=="Yes" or not answer=="n" or not answer=="No" or not answer=="no":
answer=input("have you already created an account?(y/n)")
if answer=="n" or answer=="no" or answer=="No" or answer=="y" or answer=="yes" or answer=="Yes":
c=1
if answer=="n" or answer=="no" or answer=="No":
p=1
while p==1:
UsernameSet=input("What will your username be? ")
fh = open("list.pkl", 'rb')
try:
Usernameport = pickle.load(fh)
except EOFError:
Usernameport = "."
if not (UsernameSet in Usernameport):
p=2
fh.close()
j=1
while j==1:
PasswordSet=input("What will your password be? ")
fh = open("list.pkl", 'rb')
try:
Passwordport = pickle.load(fh)
except EOFError:
Passwordport = "."
if not (PasswordSet in Passwordport):
if PasswordSet == UsernameSet:
print("Your username and password cannot be the same")
else:
j=2
print("You have created an account. please reload")
fh.close()
importthing = (UsernameSet,PasswordSet)
fh = open("list.pkl", 'ab')
pickle.dump(importthing, fh)
fh.close()
if answer=="y" or answer=="yes" or answer=="Yes":
p=1
while p==1:
Usernamething=input("Username: ")
fh = open("list.pkl", 'rb')
Usernamestuff = pickle.load(fh)
if (Usernamething in Usernamestuff):
p=2
l=Usernamething
fh.close()
j=1
while j==1:
Passwordthing=input("Password: ")
fh = open("list.pkl", 'rb')
Passwordstuff = pickle.load(fh)
if (Passwordthing in Passwordstuff):
j=2
print("you have logged in")
sys.exit()
fh.close()
请在 Pickle dump replaces current file data 查看 abarnert 的回答:
"当你将新的转储附加到同一个文件时,你最终会得到一个由多个独立值组成的文件。如果你只调用一次加载,它只会加载第一个。如果你想加载所有这些,您需要编写执行此操作的代码。例如,您可以循环加载直到 EOFError。"
def Load():
d = {}
with open('test.pkl', 'rb') as f:
while True:
try:
a = pickle.load(f)
except EOFError:
break
else:
d.update(a)
# do stuff with d