【问题标题】:Does with-statement function close files? [duplicate]with-statement 函数会关闭文件吗? [复制]
【发布时间】:2014-11-20 20:04:00
【问题描述】:

在这个简单的文件IO操作中,x.txt是在f.read的末尾关闭的吗? 另外,我如何检查该文件是否仍然打开?

with open("x.txt") as f:
    data = f.read()

【问题讨论】:

  • 是的,使用with打开会关闭文件。
  • 它在块结束后关闭,而不是在read之后,如果你运行f.seek(0),你可以再次读取文件。

标签: python with-statement


【解决方案1】:

Documentation:

处理文件时最好使用 with 关键字 对象。这样做的好处是文件在之后正确关闭 它的套件完成了,即使在途中引发了异常。这是 也比编写等效的 try-finally 块要短得多:

【讨论】:

  • 事实上,从 2.6 开始就是这样。在 2.5 中(引入了 with),内置对象还不支持上下文管理器接口。
  • @ivan_pozdeev 谢谢你的信息
【解决方案2】:

f 引用的文件对象将在控制离开 with 语句的代码块时关闭。事实上,这就是为什么您首先使用 with 语句打开文件的原因。除了在完成后自动关闭文件之外,该构造没有任何作用。

您可以通过打印f.closed flag 自行测试:

with open("x.txt") as f:
    data = f.read()
    ## Still inside with block ##
    print f.closed  # Output: False

## Outside of with block ##
print f.closed  # Output: True

【讨论】:

  • 我周二刚开始使用 Python。感谢您的帮助。
  • 可能值得在 with 语句中添加另一个 print f.closed,以准确显示它发生的位置(特别是 Rafael Barros 在评论中所做的区分)。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 2015-07-11
相关资源
最近更新 更多