使用Python擦除文件中的行数会删除文件

时间:2016-12-26 18:10:42

标签: python file python-3.x count

我试图计算文件中的行数,但我的结果很奇怪。下面是一个MWE,我相信它不言自明:

file=open('Example.txt','r')

print(sum(1 for line in file))
print(len(file.readlines()))

当我运行时,我得到输出X(正确的行数)和0。所以第二种方法要么不起作用,要么读取空变量。如果我切换顺序,我得到相同的结果,所以它工作但不知何故变量被删除。如果我使用相同的文件分配file_1file_2并使用不同的变量运行每个方法,我会得到X和X,因此在完成操​​作后变量将被删除。

我也尝试从"r"更改为"r+",但没有运气。谁能解释一下这里发生了什么?列表上的操作不应该改变列表,至少是我所教过的内容。

谢谢!

1 个答案:

答案 0 :(得分:3)

会发生什么:

print(sum(1 for line in file))

读取文件并耗尽提供行的迭代器。

然后你这样做:

print(len(file.readlines()))

你最终得到0,因为迭代器已经从前一次迭代中耗尽。使用file.seek(0)可以再次迭代它。

另外需要注意,在阅读文件时无需使用'r',这是默认模式。

一般情况下,通过检查iter(obj) is obj,您可以发现迭代器在迭代完毕后会耗尽:

f = open('example.txt')
print(iter(f) is f) # True

如果是这种情况,obj.__iter__会在其实施中返回self,从而导致所见证的行为。

如果没有,例如取名单:

l = [1, 2]
print(iter(l) is l) # False

__iter__方法返回一个闪亮的新迭代器对象(对于列表,这是一个list_iterator对象),可以多次迭代。