python - 使用Python删除文件中的文件行数

标签 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+",但没有成功。有人可以解释一下这里发生了什么吗?对列表的操作不应更改列表,至少我是这么教的。

谢谢!

最佳答案

发生的情况是:

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__ 方法返回一个 Shiny 的新迭代器对象(对于列表,这是一个 list_iterator 对象),可以多次迭代。

关于python - 使用Python删除文件中的文件行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41334806/

相关文章:

file - PowerShell Get-Content : Try{ .。 } 捕获 { ..}?

python - 尝试和错误除了 catch 中断?

c - 如何在C中读取二进制文件并保存到数组?

python - 在python断言中,断言失败时如何打印条件?

python - 如何保存/加载优化的 GPy 回归模型

python - ubuntu 上的 Visual Studio Code 无法运行 os.environ

python - 如何从列表的不同元素获取特定输出?

javascript - 如何在 Selenium 的特定页面上禁用 javascript?

python - 通过Python套接字库发出的HTTP请求

Python:标准函数和上下文管理器?