如果您使用'with'语句打开文件,是否仍需要关闭文件对象?

som*_*me1 11 python import file

对于打开文件,我习惯了显然较旧的语法:

f = open("sub_ranks.txt","r+")
for line in f:
    ...
f.close()
Run Code Online (Sandbox Code Playgroud)

我被告知现在使用这种语法几次...

with open("sub_ranks.txt", "r+") as f:
    for line in f:
        ...
Run Code Online (Sandbox Code Playgroud)

在使用"with"语句时,第二个示例中仍然需要文件对象"close"语句吗?

如果是这样,是否有任何具体的理由使用"with"语句进行文件读取?在这种情况下,它(稍微)更冗长.

Tim*_*ker 8

您当前问题的答案是"否".该with块确保当控制离开块时文件将被关闭,无论出于何种原因,包括异常(好吧,排除某人将电源线拉到您的计算机上以及其他一些罕见的事件).

所以使用with块是个好习惯.

现在可以说,一个仅用于阅读,然后无法关闭它是不是打开的文件太大的问题.当垃圾收集到来时(无论何时可能),如果没有对它的引用,那么该文件也将被关闭; 最迟将在您的程序退出时发生.实际上,官方文档中的几个代码示例忽略了关闭仅为读取访问而打开的文件.在编写文件或使用"示例"中的"读取加"模式时,您肯定需要关闭该文件.由于未能正确关闭文件,她在SO上处理不完整/损坏的文件有很多问题.