【问题标题】:Python Understanding Why Lines are SkippedPython 理解为什么会跳过行
【发布时间】:2020-08-12 04:32:42
【问题描述】:

我正在尝试从 Python 中的输入文件中逐行读取,如下所示。

in1 = open("input.txt", "r")

for i in in1:
  a1 = in1.readline()
  print(a1)

in1.close()

输入文件包含如下数字:

13245
546464
46516
684186

由于某种原因,它只打印每隔一行,中间有换行符,但我不明白为什么。

546464

684186

我希望 a1 最初存储“13245\n”,然后在下一次迭代中存储“546464\n”,依此类推,直到“684186\n”。如果我使用 readlines() 而不是 readline() 它会跳过初始数字,同时将剩余的数字与“\n”一起存储在列表中。

['546464\n', '46516\n', '684186']

为什么会这样?它是否与正在读取的换行符“\n”字符有关?我知道还有其他逐行读取文件的方法,但我想了解为什么在使用类似结构的其他语言(C++、Java)中它不能按预期工作。这不是要找到执行此操作的代码,而是要了解为什么此代码的行为方式如此。

【问题讨论】:

  • 这是因为您在循环文件对象时调用了readline()。不要那样做。

标签: python file input io newline


【解决方案1】:

试试:

in1 = open("input.txt", "r")

for i in in1:
  print(i)

in1.close()

for 循环已经执行了 readline,因此您每步执行两次。

【讨论】:

    【解决方案2】:

    问题在于您对文件进行了两次迭代 - 在您的 for 循环中并使用 readline。因此,您将在文件中每隔一行打印一次。

    您只能使用for 循环:

    in1 = open("input.txt", "r")
    for a1 in in1:
      print(a1)
    in1.close()
    

    或使用readlines() 将所有行作为列表读取并遍历它们:

    in1 = open("input.txt", "r")
    for a1 in in1.readlines():
      print(a1)
    in1.close()
    

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      相关资源
      最近更新 更多