试图找出某个文件中的哪一行并将其应用于其他内容

2024-04-25 22:11:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这个很陌生,如果我做错了,很抱歉

我正在尝试创建一个帐户/登录系统,并使用两个单独的.txt文件来存储用户名和密码

创建用户名时,密码将添加到另一个文件的相应行中。一旦我验证了用户名是正确的,我就会尝试找出用户名在我的文件中的哪一行,这样我就可以找到该用户名的正确密码

有人能帮我找到用户名所在的行,并用它来检查密码是否是该特定用户名的正确密码吗

username = input("Please enter your username: ")
    with open("usernames.txt", "r") as loginfile:
        if (username + "\n") in loginfile.readlines():
            password = input("Please enter your password: ")
            with open("passwords.txt", "r") as loginfile:
                if (password + "\n") in loginfile.readlines():
                    print("Welcome!")

这完全可以,但是如果我使用它,那么有人可以输入正确的用户名和密码,但是密码不是链接到该用户名的密码,即使它是正确的密码

这很难描述,但我希望这是有意义的

如果可以,请帮助


1条回答
网友
1楼 · 发布于 2024-04-25 22:11:54

你需要得到行号。您可以使用列表的index方法来查找匹配的项。(如果它们都不匹配,这将引发ValueError。)然后您可以在感兴趣的行号上索引密码列表(带换行符)

username = input("Please enter your username: ")
with open("usernames.txt", "r") as loginfile:
    try:
        line_number = loginfile.readlines().index(username + "\n")
    except ValueError:
        line_number = None

if line_number is not None:
    password = input("Please enter your password: ")
    with open("passwords.txt", "r") as loginfile:
        if (password + "\n") == loginfile.readlines()[line_number]:
            print("Welcome!")

请注意,在现实中,即使用户名不存在,您可能仍希望提示输入密码,因此登录没有成功的机会,因为否则您会向尝试暴力攻击(猜测用户名和密码)的人泄露太多信息使他们能够知道他们正在尝试的用户名是否有效。这可以通过将password = input(...)行移动到if块之前轻松实现

相关问题 更多 >