【发布时间】:2026-01-24 23:45:01
【问题描述】:
从历史上看,我一直使用以下方法来读取python 中的文件:
with open("file", "r") as f:
for line in f:
# do thing to line
这仍然是推荐的方法吗?使用以下内容是否有任何缺点:
from pathlib import Path
path = Path("file")
for line in path.open():
# do thing to line
我发现的大多数参考资料都使用with 关键字来打开文件,以便不必显式关闭文件。这适用于这里的迭代器方法吗?
【问题讨论】:
-
嗯,是的。在第二个示例中,您仍然缺少文件关闭部分。不知道为什么会有
Path的差异——with path.open() as f:与第一个示例相同,而for line in open("file", "r"):与第二个示例相同。 -
你应该在第二个例子中显式调用
path.close() -
Path.open()文档本身使用了一个仍然使用with的示例。 -
3 - 0- 我将继续使用with ...@GinoMempin - 完全错过了文档中的内容,谢谢。 @RishiDev - 没有path.close()方法,因为 path.open 正在返回一个文件对象 @Ry- - 当文件在循环结束时被清除时,文件是否未被python关闭?没有任何变量可以调用close()on? -
语言不保证。 CPython 的引用计数将在循环后立即关闭文件,但最好与其他 Python 实现互操作,并继续使用
with进行可预测的确定性关闭。 (另外,如果在循环中抛出异常,我不知道引用是否会在 CPython 上徘徊一段时间。)
标签: python python-3.x with-statement pathlib