为了账号安全,请及时绑定邮箱和手机立即绑定

Python不根据输入检查csv

Python不根据输入检查csv

互换的青春 2021-07-05 12:31:13
我在业余时间创建一个项目,这是一个基于用户的测验,带有记分和高分统计。目前我被困在创建的第 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")            breakCSV 文件当前仅包含以下条目:person1 password1person2 password2我究竟做错了什么?任何帮助都非常感谢。编辑:运行当前代码的输出:Enter name: person1Enter a password: password1----------------------------------------Please wait...---------------------------------------------------------ERROR!-----------------Incorrect username / password!
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

1.首先,您的 csv 并没有真正昏迷,因此请修复该问题 2.由于每行中的尾随空格而一直失败 3.这只是一个注释,您最好使用该with语句是 pythonic 方式 4.You can fix the whitespace issue with.strip()


这是您问题的有效解决方案


import os

def 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 password


login()

如果没有找到匹配项,for 循环中的 else 就会执行,学习一些新的东西


查看完整回答
反对 回复 2021-07-06
?
烙印99

TA贡献1829条经验 获得超13个赞

你有两个问题。


数据字段由空格而不是逗号分隔,因此您要编写


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

        break

else:

    print('No login')

    success = 0


if not success: sys.exit()

play_game()


查看完整回答
反对 回复 2021-07-06
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信