为什么这个发现和阅读行不通呢?

2024-10-05 10:43:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我看了其他问题,找到了如何在文本文件中找到单词所在的行,但在我的代码中使用它时,它并没有达到我想要的效果。你知道吗

 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位不知道要读取哪一行来设置变量。你知道吗


Tags: intxtinputreadlinelineusernamepasswordopen
2条回答

正如评论者指出的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的行号相关联。enumerate()中的start=1参数指定i将从1开始,而不是默认值0。你知道吗

简言之,这个语句表示我们将循环遍历fp中的行,并在运行时对它们进行计数。你知道吗

        if i == num:

for循环将遍历文件中的每一行,但我们只关心带有用户名/密码的那一行。这里我们检查当前行号i是否是我们要查找的行号。你知道吗

            u = line

如果它是我们要查找的行号,我们将u变量设置为行的内容。你知道吗

            break

关键字退出循环。找到要查找的行之后,我们不需要遍历文件的其余部分,因此我们break以节省时间。你知道吗

您可以使用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

相关问题 更多 >

    热门问题