Python不根据输入检查csv

我在业余时间创建一个项目,这是一个基于用户的测验,带有记分和高分统计。目前我被困在创建的第 1 阶段,即登录部分。我为此使用了 CSV,因为我发现它们比其他方法更容易编辑。


问题是它只检查文件的第一行,不检查其他任何内容。当涉及在第一行之后添加的人员时,这可能会导致问题,因为它检查第一行,发现它们不匹配并在下面抛出“不正确”错误。


我已经使用 print() 语句尝试查看输入或 python 检查 csv 文件是否有任何问题,但是一切似乎都很好,它以正确的格式响应完整的 csv,所以它应该可以工作。


def login():

        print("\n")

        print("-----------------------------------------")

        print("Create an account")

        print("-----------------------------------------")

        uname = input("Enter name: ")

        pword = input("Enter a password: ")

        print("----------------------------------------")

        print("Please wait...")

        print("-----------------------------------------")

        UD = open(os.path.join(os.path.dirname(__file__), 'users.csv'), 'r')

        for line in UD:

            user = line.split(",")

            print("input for uname is: "+uname)

            print("input for pword is: "+pword)

            print(user[0])

            print(user[1])

            if user[0] == uname and user[1] == pword:

                print("\n")

                print("-----------------------------------------")

                print("Login successful!")

                print("-----------------------------------------")

                UD.close()

            else:

                print("\n")

                print("----------------ERROR!-----------------")

                print("Incorrect username / password!\n")

            break

CSV 文件当前仅包含以下条目:


person1 password1

person2 password2

我究竟做错了什么?任何帮助都非常感谢。


编辑:运行当前代码的输出:


Enter name: person1

Enter a password: password1

----------------------------------------

Please wait...

-----------------------------------------



----------------ERROR!-----------------

Incorrect username / password!


互换的青春
浏览 121回答 2
2回答

HUH函数

1.首先,您的 csv 并没有真正昏迷,因此请修复该问题 2.由于每行中的尾随空格而一直失败 3.这只是一个注释,您最好使用该with语句是 pythonic 方式 4.You can fix the whitespace issue with.strip()这是您问题的有效解决方案import osdef login():    print("\n")    print("-----------------------------------------")    print("Create an account")    print("-----------------------------------------")    uname = input("Enter name: ")    pword = input("Enter a password: ")    print("----------------------------------------")    print("Please wait...")    print("-----------------------------------------")    with open(os.path.join(os.path.dirname(__file__), 'test.csv'), 'r') as f:        files = f.readlines()    for f in files:        # print('Entry: ',f)        user,pwd = f.split(",")        print(user,'\t',pwd)        print("input for uname is: "+uname)        print("input for pword is: "+pword)        if user == uname and pwd[:-1] == pword:            print("\n")            print("-----------------------------------------")            print("Login successful!")            print("-----------------------------------------")            break    else:        print("\n")        print("----------------ERROR!-----------------")        print("Incorrect username / password!\n")    print(len(uname),len(pword))#this is the length of your inputs    print(len(user),len(pwd))#This is the length of your compare values, note length of passwordlogin()如果没有找到匹配项,for 循环中的 else 就会执行,学习一些新的东西

烙印99

你有两个问题。数据字段由空格而不是逗号分隔,因此您要编写user = line.split(' ')甚至,因为默认情况下split()使用空格序列作为分隔符user = line.split()我想提一下,您可以解压缩拆分的结果并为变量使用更重要的名称user, passwd = line.split()接下来,您说用户输入和存储的数据之间不匹配,但发生这种情况是因为input()从其结果中删除了新行,而文件对象的迭代返回确实包含换行符的行,因此您必须strip()在数据项之前使用它们。这可以简单地实现,user, passwd = [item.strip() for item in line.split()]最后,我不得不提到你的登录程序是不正确的,因为如果你的用户提供了用户名和密码"person2","password2"它会检查第一行,拒绝登录并跳出循环,我敢打赌这不是你想要什么...我会写for user, passwd in (item.strip() for item in open(...)):    if user==uname and passwd==pword:        print('OK')        success = 1        breakelse:    print('No login')    success = 0if not success: sys.exit()play_game()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python