使用while循环检查文件中是否存在字符串

时间:2018-11-20 05:45:21

标签: python

我是Python的新手,在检查文件中的字符串时遇到循环麻烦。对于此程序,我正在检查用户想要创建的用户名是否已经存在。如果文件中已经存在用户名,程序将提示用户输入另一个用户名。当用户输入不在文件中的用户名时,循环结束。这是相关代码:

# Prompting for username and password
username = input("Enter your username: ")
password = input("Enter your password: ")

# open password file
f = open("password.txt", "r")

# while username exists in file
while username in f.read():
    username = input("Enter your username: ")

f.close()

如果我输入密码文件中存在的用户名,程序会提示我输入另一个用户名;但是,当我输入相同的用户名时,该程序不会停留在循环中。为什么会这样?

3 个答案:

答案 0 :(得分:0)

没有条件检查新用户名是否在文件中。

也许更简单的方法是使用以下方法?

username = input("Enter your username: ")
password = input("Enter your password: ")

# open password file
f = open("password.txt", "r")
data = f.read()

# while username exists in file
while username in data:
    new = input("Enter your username: ")
    if new in data:
        continue
    else:
        break

username = new
f.close()

答案 1 :(得分:0)

运行f.read()时,Python将读取文件,然后在下一次迭代中继续进入文件的下一行。它不会回到文件的顶部。由于文件下一行的username是空字符串或其他名称,因此它退出循环。要解决此问题,您可以使用上下文管理器,如下所示:

# Prompting for username and password
username = input("Enter your username: ")
password = input("Enter your password: ")

# read in the file data
with open('password.txt') as f:
    data = f.read()

# while username exists in file
while username in data:
    username = input("Enter your username: ")

然后根据.txt文件中数据的结构,如果使用新行,则可以在split()上调用data

答案 2 :(得分:0)

这是因为您在while条件中使用了f.read()。 f.read一次读取文件的全部内容,没有其他内容可读取,导致while循环结束。

如果要检查文件中的用户名,建议您创建一个从文件中读取的用户名列表,并在while循环中使用它进行检查。

如果文件包含内容: username1,username2,...

您可以

listOfUsernames = f.read().split(',')

,然后使用它来检查while循环。