【问题标题】:Printing contents of a file with and without using readlines() method使用和不使用 readlines() 方法打印文件的内容
【发布时间】:2023-03-13 21:40:02
【问题描述】:

我已经开始学习 python 并且遇到了以下代码来打印文件的内容:

with open('Example2.txt','r') as readfile:
     for line in readfile:
          print(line)

输出如下:

This is line A

This is line B

This is line C

This is line D

如果信息表明for 循环逐行获取输入然后打印它的来源,但据我所知(如果我错了请纠正我),变量readfile 包含单个字符串那么循环怎么会运行多次呢?它必须一次打印文件的内容。

另外,这是我认为可以逐行读取文件的正确代码,它也会打印相同的输出。那么前面的代码和这段代码有什么区别呢?

with open('Example2.txt','r') as readfile:
     for line in readfile.readlines():
          print(line)

【问题讨论】:

  • “变量 readfile 包含一个字符串,那么循环为什么会多次运行” - 这不是真的。 readfile 是一个文件对象,而不是一个字符串。
  • 这能回答你的问题吗? Reading files in Python with for loop
  • readfile 是一个 TextIOWrapp 对象。它是一个迭代器。你可以迭代。 readlines 方法返回一个行列表。你也可以迭代它。
  • @afterburner,我知道它不是字符串而是对象,那么您能解释一下我提到的两个代码之间的区别吗?
  • readlines 方法读取整个文件并将所有行放在一个列表中。 readfile 对象,如果有效实施,将不会读取整个文件。如果您有一个大文件并且不需要同时需要所有内容,那么第一种方法可能会更好。

标签: python python-3.x readlines


【解决方案1】:

其实readfile变量是一个文件对象,它有一个__iter__方法,其中__iter__的每个索引对应你文件中的一行。有关更多信息,请查看此类似问题:Reading files in Python with for loop

实际的类型定义可以在here找到,它继承自BufferedIOBase,而IOBase又继承自IOBase,其中定义了readlines方法

两个代码sn-ps的区别在于,在第一个代码中,您依赖TextIOWrapper的实现,它本质上是语法糖,为您调用readlines,而在第二个代码中,您是在明确拨打电话。

【讨论】:

  • 谢谢 Pramote,我不确定实际的课程叫什么。
猜你喜欢
  • 2019-04-25
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多