【问题标题】:Reading a simple .txt file with python, why does this simple code output every line? How does python know it should do that?用python读取一个简单的.txt文件,为什么这个简单的代码会输出每一行? python怎么知道它应该这样做?
【发布时间】:2019-07-31 14:19:31
【问题描述】:

编程新手,python 新手 ;) 尝试学习文件操作。 我不明白下面的代码是如何工作的。当使用 for 循环调用 open() 时会发生什么,为什么这与另一个 python 函数 .read(number_of_elements) 不同?

我有一个 test.txt 文件,它的编号从 1) 到 10),每一个都在一个新行上。所以一个 10 行的 txt 文件。为什么 python 使用这个 for 循环显示整个 txt 文件?为什么它知道在每一行打印每一行?是因为 Python 将 .txt 转换为列表然后循环遍历它吗?

我试过做 print(f) 但这会返回有关 test.txt 文件的一些信息,并且没有像我预期的那样打印文件的内容。

python 代码:

with open("test.txt", "r") as f:
    for line in f:
        print(line)

test.txt 文件:

1)
2)
3)
4)
...

【问题讨论】:

  • 我建议您查看 python 文档 (docs.python.org/3/library/functions.html#open),您可以在提供的链接中找到有关方法的信息。 python 在打开时所做的是准备您的文件以在您的情况下读取并通过“f”公开它的内部引用,我们可以想象它是一个对象。如果您遍历 'f' python 将返回文件的每一行分隔,它知道如何分隔行以查找称为新行的特殊字符:'\n'
  • 打开的文件是可迭代的,每次迭代返回一行 - Python lists 和其他集合也是可迭代的。 f.read() 会将文件内容作为字符串返回(可能将其与非常大的文件一起使用是不明智的)。
  • 谢谢先生们,这一切都清楚了。

标签: python python-3.x


【解决方案1】:

是不是因为 Python 将 .txt 转换成一个列表,然后循环遍历它

实际上,是的。代码可以改写为:

file = open("test.txt", "r")
for line in file:
    print(line)

file.close()

这涉及到一些“魔法”,但基本上file 中的File 对象知道,如果它正在被迭代(通过for line in file),它应该在每次迭代时给出一行。

每行迭代文件通常是您想要做的 - 因此 python 提供了一种快速简便的方法来做到这一点。如果您希望将整个文件放在一个变量中,还有一种方法。

【讨论】:

  • 谢谢兄弟
  • 我会说这些不是“怪癖”,只是 Python 的工作方式。我个人根据我目前的需要学习了 Python(StackOverflow + Google 是你的朋友),但是有很多可用的教程。但即使在今天,当我从事专业编码时,正如你所说,有很多试验和错误。通常,您使用的函数都有很好的文档记录(使用 IDE,例如 Pycharm,因为这很有帮助)。但有时最快的方法是尝试某些东西的行为,如果它仍然看起来很奇怪,只需谷歌搜索即可。很有可能,您不是第一个感到困惑的人。祝你好运!
【解决方案2】:

变量f 是您的整个文档。

我们一起聊聊for line in f:

通过使用这一行,您将遍历文本文件的每一行。所以每次在循环中,line 的值都是你的新文件行,当print(line) 运行时,它会为你打印每一行,并带有\n,这意味着转到下一行。

您可以使用此链接获得更多示例和信息:File in Python

【讨论】:

  • 谢谢,我知道 for 循环在 python 中是如何工作的,我只是不知道 open() 使每个新行的内容都可迭代\n。我很困惑为什么 for 循环工作以及 python 如何将 line 变量分配给每个 \n
  • 啊哈,我明白了。正如我在第 3 段中提到的打印它附加了一个新的\n。您可以通过这样打印来更改它:print(line,end=' ')。这样它就不会打印一个新行,而是打印一个空格。
  • 这不是我的意思,马丁回答了我上面的意思:“这涉及到一点“魔法”,但基本上文件中的文件对象知道它是否正在被迭代(通过 for line在文件中),它应该在每次迭代中给出一行。”正如我所说,我不知道 python 函数 open() 会迭代每个新行,因为它与 for 循环一起工作很容易。
猜你喜欢
  • 2016-05-30
  • 2016-07-15
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
相关资源
最近更新 更多