我已经查看了其他问题,并了解了如何在文本文件中找到单词所在的行,但在我的代码中使用它时,它并没有按照我的意愿去做。
while x == "i" :
print ("Please Enter Your Usename And Pasword!")
luser = input("USERNAME - ")
Lpass = input("PASSWORD - ")
with open("USERNAME.txt") as ucc:
for num, line in enumerate(ucc, 1):
if luser in line:
print (int(num))
uc = open( "USERNAME.txt", "r")
pc = open( "PASSWORD.txt", "r")
u = uc.readline(int(num))
pw = pc.readline(int(num))
print (u)
print (pw)
所以我运行它并输入我在我的注册程序中使用的用户名,它的意思是检查它所在的行,以便它知道哪个密码与它配对。但由于某种原因,readline位不知道要读取什么行来设置变量。
答案 0 :(得分:1)
正如评论者所指出的那样,readline()
不会将行号作为参数。读取特定行的一种方法是遍历文件,直到到达所需的行。
with open("USERNAME.txt", "r") as fp:
for i, line in enumerate(fp, start=1):
if i == num:
u = line
break
with open("PASSWORD.txt", "r") as fp:
for i, line in enumerate(fp, start=1):
if i == num:
pw = line
break
逐行说明:
with open("USERNAME.txt", "r") as fp:
以读取模式打开USERNAME.txt
文件(由r
表示)并将其file object分配给名为fp
的变量。
for i, line in enumerate(fp, start=1):
通常,如果我们想逐行循环遍历文件,我们就可以
for line in fp:
但是,我们需要知道与每一行关联的行号,以便我们可以找到特定的行。 enumerate()让我们将每一行与分配给变量i
的行号相关联。 start=1
中的enumerate()
参数指定i
将从1
开始,而不是默认0
。
简而言之,这句话说我们将绕过fp
中的行并在我们去的时候计算它们。
if i == num:
我们的for循环将遍历文件中的每一行,但我们只关心使用我们的用户名/密码的行。在这里,我们检查当前行号i
是否是我们正在寻找的行号。
u = line
如果是我们要查找的行号,我们会将u
变量设置为该行的内容。
break
退出循环的关键字。在找到我们要查找的行之后,我们不需要浏览文件的其余部分,因此我们break
可以节省时间。
答案 1 :(得分:1)
您可以使用linecache标准库的模块直接转到特定行 PS无需打开文件
line = linecache.getline(file, num)
适合您的情况
import linecache
ucc = open("USERNAME.txt", "r")
while x == "i":
print ("Please Enter Your Usename And Pasword!")
luser = input("USERNAME - ")
Lpass = input("PASSWORD - ")
for num, line in enumerate(ucc, 1):
if luser in line:
pw = linecache.getline("PASSWORD.txt", num)
print(line)
print(pw)
break