【问题标题】:No need to close the file if it is opened with 'print' in Python? [duplicate]如果在 Python 中使用“打印”打开文件,则无需关闭文件? [复制]
【发布时间】:2013-04-11 21:12:54
【问题描述】:

我通常使用:

f = open(path,'w')
print >> f, string
f.close()

但是,我在别人的代码中看到了:

print >> open(path,'w'), string

也很好用。

那么,如果文件是用'print'打开的,我们就不必关闭它了?

【问题讨论】:

  • 如何使用open()的结果并不重要;无论上下文如何,它仍然是一个打开的文件对象。
  • 始终使用with。有关详细信息,请参阅 PEP343。
  • @MartijnPieters 所以第二个用法错了?
  • 是的。第二种用法是错误的。
  • 这是一个独特的问题,因为它询问打印语句是否存在异常。

标签: python file


【解决方案1】:

是的,您仍然需要关闭文件。 print没有区别。

关闭文件会将数据刷新到磁盘并释放文件句柄。

在 CPython 中,当 f 的引用计数降至零时,系统将为您执行此操作。在 PyPy、IronPython 和 Jython 中,您需要等待垃圾收集器运行(用于自动关闭文件)。与其采用依赖内存管理器自动关闭的脆弱做法,不如由您控制文件的关闭。

由于显式关闭文件是一种最佳实践,Python 为文件对象提供了一个上下文管理器,使其变得非常简单:

with open(path, 'w') as f:
    print >> f, string

当您离开 with-statement 的正文时,这将关闭您的文件。

【讨论】:

  • +1:喜欢你不仅涉及 CPython 的细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多