我的程序只能识别 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