要在Python中读取文件,必须首先打开该文件,然后需要read()
函数。为什么当我们使用for
循环来读取文件的行时,是否需要read()
函数?
filename = 'pi_digits.txt'
with open(filename,) as file_object:
for line in file_object:
print(line)
我已经习惯了下面的代码,显示了read
要求。
for line in file_object.read():
答案 0 :(得分:2)
这是因为file_object类内置了一个“iter”方法,该方法说明了文件如何与迭代语句交互,如for循环。
换句话说,当你说for line in file_object
时,文件对象引用了它的__iter__
方法,并返回一个列表,其中每个索引都包含一行文件。
答案 1 :(得分:0)
open
语句中的with
命令隐式处理读取。它创建了一个生成器,一次生成一个记录文件(read
隐藏在生成器中)。对于文本文件,每行是一条记录。
请注意,第二个示例中的read
命令将整个文件读入字符串;这比一次一行的例子消耗更多的内存。
答案 2 :(得分:0)
Python文件对象在迭代它们时定义了特殊行为,在这种情况下使用for
循环。每当你点击循环顶部时,它都会隐式调用readline()
。这就是它的全部内容。
请注意,您“习惯”的代码实际上会逐个字符地迭代,而不是逐行迭代!那是因为你将遍历一个字符串(read()
的结果),当Python迭代字符串时,它逐字逐句。