无法将输入变量与 .txt 中的数据进行比较/无法读取文件来比较数据

Unable to compare input variable to data within a .txt / Unable to read file to compare data

目前我正在制作一个既可以登录又可以注册的程序,username/password 存储在一个单独的 .txt 文件中。 注册工作正常,用户名和密码写入没有问题,但我在 userRegisteruserLogin[= 中读取文件时遇到问题11=]

.txt 文件的格式为 username,password 我想知道如何从文件中读取以比较 loginUsernameloginPasswordusername_password 并将 registerUsername 与现有用户名进行比较以确保没有重复。

username_password = open("savedCredentials.txt", "r+")

option = ()
def startMenu():
    option = input("Do you want to [login] or [register] an account?:")
    if option == 'login':
        return userLogin()
    elif option == 'register':
        return userRegister()
    else:
        print("Invalid input, enter either [login] or [register]")
        return startMenu()

def userRegister():
    registerUsername = input("Enter a username: ")
    if registerUsername in username_password:
        print("This username is already in use")
        userRegister()
    else:
        registerPassword = input ("Enter a password: ")
        if len(registerPassword) < 5:
            print("Your password needs to contain 5 or more characters")
            registerPassword()
        elif " " in registerPassword:
            print("Your password cannot contain spaces")
        else:
            register = open("savedCredentials.txt", "a")
            register.write(registerUsername)
            register.write(",")
            register.write(registerPassword)
            register.write("\n")
            print("Your username and password have been successfully registered")

def userLogin():
    loginUsername = input("Enter your username: ")
    if loginUsername in username_password:
        loginPassword = input("Enter your password: ")
        if loginPassword in username_password:
            successfulLogin()
    else:
        print("This username isn't registered to an account, please try again")
        return userLogin()

def successfulLogin():
    print("You have been logged in")

username_password.close()

几件事:

  1. 您没有在上面的代码中调用任何函数,因此 运行 不会像现在这样。

  2. 您不能迭代文本包装器,您可以通过 .read()

    读取文件来解决这个问题
  3. 如果你在你的函数之外关闭()文件,你会得到一个文件已关闭的错误,而是在你的函数内关闭文件(当用户完成时)。

  4. 一旦您完成条件 if 搜索,就会发现 .read() 在第二轮不再起作用。不太清楚为什么(也许这里的其他人可以更详细地说明),但解决方法是将您的文件转换为列表,然后搜索该列表。

下面的工作,但它有点难看(我必须去知道,但想 post 这真的很快所以你至少有一个工作示例,并且可以基于它构建)。

username_password2=[]
with open("savedCredentials.txt", "r+") as file:
    for lines in file:
        a=lines.replace(',',' ')
        b=a.split()
        username_password2.append(b)

username_password = [x for y in username_password2 for x in y]

option = ()
def startMenu():
    option = input("Do you want to [login] or [register] an account?:")
    if option == 'login':
        return userLogin()
    elif option == 'register':
        return userRegister()
    else:
        print("Invalid input, enter either [login] or [register]")
        return startMenu()

def userRegister():
    registerUsername = input("Enter a username: ")
    if registerUsername in username_password:
        print("This username is already in use")
        userRegister()
    else:
        while True:
            registerPassword = input ("Enter a password: ")
            if len(registerPassword) < 5:
                print("Your password needs to contain 5 or more characters")
            elif " " in registerPassword:
                print("Your password cannot contain spaces")
            else:
                register = open("savedCredentials.txt", "a")
                register.write(registerUsername)
                register.write(",")
                register.write(registerPassword)
                register.write("\n")
                print("Your username and password have been successfully registered")
                register.close()
                break

def userLogin():
    loginUsername = input("Enter your username: ")
    if loginUsername in username_password:
        loginPassword = input("Enter your password: ")
        if loginPassword in username_password:
            successfulLogin()
        else:
            print(username_password)
    else:
        print("This username isn't registered to an account, please try again")
        return userLogin()

def successfulLogin():
    print("You have been logged in")

startMenu()

您必须将 read 功能添加到您的文件打开。

替换行username_password = open("savedCredentials.txt", "r+")

来自

username_password = open("savedCredentials.txt", "r+").read()

然后你必须删除行 username_password.close()

此外,您需要调用 startMenu 函数,因此请在代码底部添加 startMenu()