【问题标题】:Why does this code (Python) only return one line?为什么这段代码(Python)只返回一行?
【发布时间】:2023-03-05 01:12:01
【问题描述】:

我最近开始编程,想对文件进行排序,但最后这段代码只返回一行,即使文本文件有 65 行...

f = open(".\\test.txt")
g, u = [], []
a = 0


for i, line in enumerate(f):
    a += 1
    if i%2 == 0:
        g.append(f.readlines()[i])
        print(i),
    elif i%2 == 1:
        u.append(f.readlines()[i])
        print(i),


print(u),
print(g)

【问题讨论】:

  • 你不能像以前那样使用readlines()。看看there
  • 当然你可以用append(line)替换append(f.readlines()[i])...
  • @RandomDavis 完美运行,非常感谢

标签: python file


【解决方案1】:

您的for 循环开始逐行读取文件。但随后它的内容会在一个 readlines 调用中读取文件的其余部分;在那之后,就没有什么可读的了!所以你最终得到line 中的第一行和g 中的第二行,因为你只保留了readlines() 读取的一行。

【讨论】:

    【解决方案2】:

    open(filename) 为您提供了一个遍历文件行的迭代器。此迭代器将在读取所有行一次后耗尽,因此在第一行之后对readlines 的任何后续调用都将为您提供一个空列表。

    演示:

    >>> with open('testfile.txt') as f:
    ...     a = f.readlines()
    ...     b = f.readlines()
    ...     a
    ...     b
    ... 
    ['hello\n', 'stack\n', 'overflow\n']
    []
    

    【讨论】:

      【解决方案3】:

      你必须这样做

      lines = f.readlines()
      for i, line in enumerate(lines):
          a += 1
          if i%2 == 0:
              g.append(lines[i])
              print(i),
          elif i%2 == 1:
              u.append(lines[i])
              print(i),
      

      【讨论】:

      • 如果我这样做,我会收到一个值错误:要解压的值太多(预期为 2)
      • 对不起,错字。固定
      猜你喜欢
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      相关资源
      最近更新 更多