【问题标题】:Read a specific line from a text file then check if it's equal to a string variable?从文本文件中读取特定行,然后检查它是否等于字符串变量?
【发布时间】:2020-06-09 17:48:55
【问题描述】:

我正在尝试创建一个登录系统。用户创建他们的帐户并输入他们想要使用的用户名密码

用户名存储在新文本文件的第 1 行。

密码存储在文本文件的第 2 行。

现在我打开文件并使其可读

user_file = open("user1.txt", "r")

然后我让用户输入之前创建的用户名。

username_login = input("Enter username ")

现在我想检查提交的用户名是否是存储在第 1 行的用户名

if user_file.readline(1) != username_login:
        print("Incorrect username")
    else:
        password_login = input("Enter Password ")

如果提交的用户名正确,它将匹配第 1 行,因此打印 else 语句。但相反,我总是收到“不正确的用户名”反馈

【问题讨论】:

  • 关于这是一种非常不安全的创建登录系统的方式的强制性评论。您永远不想以纯文本形式存储用户凭据。如果这是任何产品而不只是学术练习,请在存储密码之前先对密码进行哈希处理,然后将用户输入的哈希值与您存储的哈希值进行比较。
  • 是的,这是一个学术练习,但我期待在完成后学习如何散列密码,以便改进程序

标签: python python-3.x authentication readline readlines


【解决方案1】:

假设文件只包含 2 行,您可以做的是提取用户名和密码,然后将它们与输入的数据进行比较。示例:

with open('user1.txt') as f:
   username, password = f.read().splitlines() 
# now compare username and password with input data

【讨论】:

    【解决方案2】:

    使用for 循环遍历您的文件:

    for line in user_file.readlines():
        if line[0] == username:
            #do something
    

    【讨论】:

      【解决方案3】:

      正如 Ryan 所说,这绝对不是现实中应该管理登录的方式,但假设这只是在练习 python……

      首先,请注意 python 索引从 0 开始,因此第一行将被称为第 0 行。我也不相信 readline() 接受一个参数来让它做你想做的事。相反,一种解决方案可能是将文件内容存储到可以索引的列表中:

      lines = user_file.readlines()
      username_login = input("Enter username ")
      if lines[0].strip('\n') != username_login:
          print("Incorrect username")
      else:
          password_login = input("Enter Password ")
      

      然后要访问密码你可以做lines[1]

      【讨论】:

      • 好吧,这是有道理的。我了解到 readline() 中的数字是为了限制字节缓冲区。尽管我尝试了您推荐的方法,但仍然返回“不正确的用户名” lines = user_file.readlines() username_login = input("Enter username ") if lines[0] != username_login: print("Incorrect username") else: password_login = input ("输入密码")
      • 哦,对不起,我忘了像这样的阅读行也包括行尾的换行符。我已经编辑了代码以将其删除,所以它现在可以工作了
      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2022-10-13
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多