【问题标题】:returning lines in text file that are at certain indexes返回文本文件中位于某些索引处的行
【发布时间】:2022-08-19 00:01:24
【问题描述】:
lines = [11,22,50]
f=open(\'erste_seite_test2.txt\')
line_number = 0
for i in lines:
    f.readlines()[i]

为什么当文本文件超过 50 行时会引发 IndexError: list index out of range 以及如何修复我的代码?

  • for i, line in enumerate(f.readlines()): 怎么样?

标签: python txt index-error


【解决方案1】:

我不完全理解你的问题。但是,根据我的理解,如果您的文本至少有 50 行,这是最简单的代码:

f = open("erste_seite_test2.txt", "r")
lines = f.readlines()
print (lines[50])

它也可以很容易地用你的例子中的 for 循环重写,但我不知道你为什么需要一个循环。

【讨论】:

    【解决方案2】:

    您可以通过几种方式改进您的代码。

    1. with open,确保您的文件句柄被关闭
    2. 翻转你的for循环来检查文件而不是感兴趣的行号(将阻止IndexError
    3. for line in <file handle> 遍历文件而不将其全部加载到内存中(readlines 确实如此)
      line_numbers = [11,22,50]
      lines = []
      with open("erste_seite_test2.txt", "rt") as f:
          for i, line in enumerate(f):
              if i in line_numbers:
                   lines.append(line)
      

      或者,将line_numbers 移动到set 以使if i in line_numbers 更高效。

    【讨论】:

      【解决方案3】:

      问题实际上是您在循环中调用readlines,这将从第二次迭代开始为您提供一个空列表。认为在您第一次调用readlines 时已到达文件末尾,因此您必须重新设置它才能再次使用它,但最好将其存储在变量中并且它会起作用。

      line_numbers = [11,22,50]
      f=open('erste_seite_test2.txt')
      lines = f.readlines()
      
      for i in line_numbers:
          print(lines[i])
      

      【讨论】:

        【解决方案4】:

        如果我理解您的问题,您正在寻找带有[11,22,50] 行的文件内容

        lines = [11,22,50]
        
        f = open('erste_seite_test2.txt', 'r')
        file_lines = f.readlines()
        
        for i in lines:
            if i in enumerate(file_lines):
                print(file_lines)
        f.close()
        

        【讨论】:

        • 为什么要用readlines 读取完整文件,然后用if i in enumerate(file_lines): 遍历它N 次?
        猜你喜欢
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多