答案 0 :(得分:4)
当对象被垃圾收集时,文件将被关闭。在CPython中,这种情况在执行该行之后立即发生,因为文件永远不会分配给变量。在其他Pythons中,例如Jython或IronPython,这可能不会马上(或根本不会)发生,尽管所有打开的文件在进程退出时总是关闭。
出于这个原因,更好的方法是使用'with'显式关闭文件:
with open("strcpy.c") as infile:
l = list(infile)
这样做的一个优点是即使在读取文件时发生异常,文件也会正确关闭;您不必使用try/except
块手动编写此案例的代码。
如果你想坚持简洁的单行,可以在一行写一个with
语句。 : - )
那就是说,我有时会在短时间运行的脚本中使用这个成语,其中文件打开时间比它严格要求的时间长得多并不是什么大问题。一个优点是,您不会使用指向已关闭文件的变量(在这种情况下为infile
)混乱。
答案 1 :(得分:2)
来自doc:
最好在处理文件时使用with关键字 对象。这样做的好处是文件在之后正确关闭 它的套件即使在路上引发异常也会完成。
你可以像这样使用它:
with open('strcpy.c') as f:
l = list(f)
答案 2 :(得分:2)
就个人而言,如果没有上下文管理器,我永远不会打开文件:
with open('strcpy.c') as myfile:
l = list(myfile)
# do stuff with l here
使用上下文管理器时,文件会在缩进块的末尾自动关闭。