Python 3.x 正在尝试打开.txt文件并检查用户名是否存在

Python 3.x 正在尝试打开.txt文件并检查用户名是否存在,python-3.x,Python 3.x,我正在使用Python3.5为类编写一个用户名/密码程序,除了这一部分之外,一切都很好。代码应该打开.txt文件(如果不存在,则创建一个),然后检查您输入的用户名是否已经在文件中。目前,它似乎正在读取一个空白列表(“[]”),基本上看不到任何要检查的内容,因此它接受用户名,尽管您在Windows文件浏览器中打开它时,它确实存在于文件中 下面是用户名函数的外观: def registerNewUsername(): checker = 0 while(checker == 0):

我正在使用Python3.5为类编写一个用户名/密码程序,除了这一部分之外,一切都很好。代码应该打开.txt文件(如果不存在,则创建一个),然后检查您输入的用户名是否已经在文件中。目前,它似乎正在读取一个空白列表(“[]”),基本上看不到任何要检查的内容,因此它接受用户名,尽管您在Windows文件浏览器中打开它时,它确实存在于文件中

下面是用户名函数的外观:

def registerNewUsername():
    checker = 0
    while(checker == 0):
        usernameInput = input("Please enter a username.\n")
        usernameInput.strip()
        usernameExists = False

        try:
            f = open("loginInfo.txt", "a+")
            userDataEntry = f.readlines()
            f.close()
        except:
            print("Something went wrong!")

        listLines = []
        for eachLine in listLines:
            entry = eachLine.split()
            keep = entry[0]
            listLines.append(keep)
        print(listLines)

        if(usernameInput in userDataEntry):
            print("This username already exists. Try again.\n")
            usernameExists = True
            checker = 0
        if("@" in usernameInput and ".edu" in usernameInput and usernameExists == False):
            print("\nUsername Accepted\n")
            checker = 1
       else:
            print("You need to include @ and .edu in your username. Try again.\n")
            checker = 0

    return usernameInput
def saveData(passwordInput, usernameInput):
    userDataEntry = usernameInput + " " + passwordInput + "\n"
    fileObject = open('loginInfo.txt', 'a')
    fileObject.write(userDataEntry)
    fileObject.close()
以下是创建用户/通行证列表的功能(用户名和密码获得批准后):

def registerNewUsername():
    checker = 0
    while(checker == 0):
        usernameInput = input("Please enter a username.\n")
        usernameInput.strip()
        usernameExists = False

        try:
            f = open("loginInfo.txt", "a+")
            userDataEntry = f.readlines()
            f.close()
        except:
            print("Something went wrong!")

        listLines = []
        for eachLine in listLines:
            entry = eachLine.split()
            keep = entry[0]
            listLines.append(keep)
        print(listLines)

        if(usernameInput in userDataEntry):
            print("This username already exists. Try again.\n")
            usernameExists = True
            checker = 0
        if("@" in usernameInput and ".edu" in usernameInput and usernameExists == False):
            print("\nUsername Accepted\n")
            checker = 1
       else:
            print("You need to include @ and .edu in your username. Try again.\n")
            checker = 0

    return usernameInput
def saveData(passwordInput, usernameInput):
    userDataEntry = usernameInput + " " + passwordInput + "\n"
    fileObject = open('loginInfo.txt', 'a')
    fileObject.write(userDataEntry)
    fileObject.close()
但是,登录功能确实可以读取列表,并且可以使用其中的数据,因此该功能中可能缺少一些内容?

def loginExisting():
    userDataEntry = open('loginInfo.txt', 'r')
    listLines = userDataEntry.readlines()
    userDataEntry.close()

    userDict = {}

    for eachLine in listLines:
        entry = eachLine.split()
        username = entry[0]
        password = entry[1]
        userDict[username] = password

    checker = 0
    while(checker == 0):
        print("\nYou've registered already? (OwO) Okay then!\n")
        usernameInput = input("Please enter your username:")
        passwordInput = input("Please enter your password:")


        if(usernameInput in userDict):
            if(userDict[usernameInput] == passwordInput):
                print("\nLogin successful!\nWelcome back,", usernameInput)
                checker = 1

            else:
                print("Password is incorrect. Try again.")
                checker = 0

        else:
            print("Username does not exist. Try again.")
            checker = 0

    nextStep = int(input("\nWould you like to:\n1.) Exit\n2.) Log out and return to menu\n\n"))
    if(nextStep == 1):
        print("\nGoodbye!")

    if(nextStep == 2):
        print("\nReturning to menu...\n")

        return nextStep

非常感谢您的帮助

这可能是因为在
registerNewUsername
函数中,您运行
usernameInput.strip()
而不将其分配给任何对象。如果不将结果赋回变量或其他变量,则不会发生任何事情。再次尝试运行它,将
usernameInput.strip()
行更改为
usernameInput=usernameInput.strip()

,这可能是因为在
registerNewUsername
函数中,您运行
usernameInput.strip()
,而不将其分配给任何对象。如果不将结果赋回变量或其他变量,则不会发生任何事情。再次尝试运行它,将
usernameInput.strip()
行更改为
usernameInput=usernameInput.strip()

您能进一步说明什么不起作用吗?你期望的输出是什么,你得到了什么?它会崩溃吗?基本上,代码只需要验证用户名不在文件中,然后继续。print语句只是检查它是否正确地打开和读取了txt文件。现在它打印一个空列表,但txt文件包含“username@blah.edu密码3“(带空格)。如果我尝试输入相同的用户名,它将接受该用户名,而不是采用“此用户名已存在。请重试。\n”路由重新启动用户名注册过程。这有意义吗?你能再澄清一下什么不起作用吗?你期望的输出是什么,你得到了什么?它会崩溃吗?基本上,代码只需要验证用户名不在文件中,然后继续。print语句只是检查它是否正确地打开和读取了txt文件。现在它打印一个空列表,但txt文件包含“username@blah.edu密码3“(带空格)。如果我尝试输入相同的用户名,它将接受该用户名,而不是采用“此用户名已存在。请重试。\n”路由重新启动用户名注册过程。这有意义吗?