[英]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.