从文本文件中逐行读取

时间:2016-02-04 21:07:48

标签: python

我有这个包含以下内容的文本文件:

Ryan#Male#Ryan123#Ryan321#
Lina#Female#Lina123#Lina321#

订单为Name#Gender#username#password

user = username.get() //from tkinter entry
pass = password.get()
counter = IntVar()
counter = 0

file = open("user.txt", "r")
for login in file:
     login = login .split('#')
     if user == login [2]:
         counter += 1
     if pass== login [3]:
         counter += 1

file.close()

if counter == 2:
     //go to next page
else:
     print "wrong username or password!"

这有效,但是,当我尝试打印登录[2]时,它返回了;

Ryan123
Lina123

当我使用Ryan作为用户名时,我仍然可以使用Lina的密码登录。如何检查每行.txt文件行中的内容?

我的意思是,首先检查这一行:

Ryan#Male#Ryan123#Ryan321#

当找不到登录信息时,它将进入下一行。

3 个答案:

答案 0 :(得分:2)

密码问题是因为您从未在行之间重置计数器。但是,在不计算条件的情况下,它可以更简单地完成:

file = open("user.txt", "r")
for login in file:
    login = login.split('#')
    if user == login[2] and password == login[3]:
        print 'Correct username/password'
        break
else:
    print 'Invalid username/password'
顺便说一句,

pass是Python中的关键字,因此为变量名使用其他内容是个好主意。

答案 1 :(得分:1)

这里需要一个“和”条件,因为密码和用户名应该匹配!

he_is_cool = False
for login in file:
     login = login .split('#')
     if user == login [2] and pass== login [3]:
         he_is_cool = True
         break

file.close()

if he_is_cool:
     //go to next page
else:
     print "wrong username or password!"

请注意,当您识别出用户时,break将“终止”您的循环。该计划也将在没有break的情况下运作。

答案 2 :(得分:1)

您正在检查可能位于两条不同线路上的两个不同的字段(例如,用户匹配Ryan,密码与Lina' s匹配)。

通常,用户和密码必须与单个特定用户匹配。

所以你可以摆脱计数器并尝试使用

pwd = password.get()
with open("user.txt", "r") as file:
    for login in file:
        login = login .split('#')
        if user == login[2] and pwd == login[3]:
            pass # go to next page, substitute pass on this line!
    else:
        print "wrong username and password!"