有没有一种方法可以检查文本文件中是否存在userinput?

时间:2020-05-18 06:46:58

标签: python

我正在制作的该程序的一部分需要用户输入(用户名),并检查它是否已存在于文本文件中。如果已经存在,则打印(“用户名已经存在”。) 但是现在,不管输入是否已经存在于文本文件中,程序都会继续将输入添加到文本文件中。 有人知道如何解决吗?(这是btw的一部分)

def passcheck():
    user=name_ent2.get()
    pass1 = pass_ent2.get()
    confirm = retype_ent.get()
    names = open("nlist.txt","a+")
    if user in names:
        print("username already exists.")
    if user not in names:
        names.write(user)
        names.write('\n')
        names.close()

是否可以检查文本文件中是否存在userinput?

2 个答案:

答案 0 :(得分:0)

当您使用user in names测试成员资格时,Python会在文件的各行上进行迭代,并将user与每一行进行比较。

这里的问题是,在行的末尾包含一个换行符\n,因此您的名字将不匹配。

因此,您必须在进行比较之前删除此换行符的行,例如:

with open('nlist.txt') as names:
    if any(user == line.strip() for line in names):
        print('User exists')

还请注意,我以读取模式(默认为'r')打开文件。您以附加模式打开它,该模式将指针放在文件末尾。由于没有更多要阅读的内容,您的检查将始终失败。

答案 1 :(得分:0)

def passcheck():    
  user=name_ent2.get()
  pass1 = pass_ent2.get()
  confirm = retype_ent.get()
  names = open("nlist.txt","a+")

  paste = bytes(user, 'utf-8')
  with open("nlist.txt", "rb", 0) as file:
    for f in file:
        f = f.strip()
        if f == paste:
            print("true")
            status = True
    if status == False:
        names.write("\n" + user)
        print(user + " got added to the list")
  names.close()