繁体   English   中英

使用Python擦除文件中的行数

[英]Line count in file with Python erases file

我正在尝试计算文件中的行数,但结果却很奇怪。 在MWE下方,我相信这是不言而喻的:

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

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

运行此命令时,输出为X (正确的行数)和0 因此,第二种方法要么不起作用,要么读取空变量。 如果切换顺序,则会得到相同的结果,因此可以正常工作,但是以某种方式清除了变量。 如果我为文件file_1和文件file_2分配了相同的文件,并使用不同的变量运行每个方法, file_2得到X和X,因此在完成操​​作后该变量将被擦除。

我也尝试将"r"更改为"r+" ,但没有运气。 有人可以解释这里发生了什么吗? 对列表的操作不应更改列表,至少这是我所教过的。

谢谢!

发生的是:

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对象)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM