我通常使用: f = open(path,'w') print >> f, string f.close() 然而,我在别人的代码中看到了以下内容:print >> open(path,'w'), string 同样也可以很好地工作。 那么,如果文件是用“print”打开的,我们就不必关闭它吗?
是的,您仍然需要关闭文件。与print没有区别。关闭文件将刷新数据到磁盘并释放文件句柄。在CPython中,当f的引用计数降至零时,系统会自动执行此操作。在PyPy、IronPython和Jython中,您需要等待垃圾回收器运行(以进行自动文件关闭)。为了避免依赖内存管理器自动关闭而采取脆弱的做法,最好的做法是由您控制文件的关闭。由于显式关闭文件是最佳实践,Python为文件对象提供了一个上下文管理器,使它非常容易:with open(path, 'w') as f: print >> f, string 当你离开with语句块的主体部分时,这将关闭你的文件。
open()
的结果,它仍然是一个打开的文件对象,无论上下文如何。 - Martijn Pieterswith
。有关更多信息,请参阅PEP343。 - aldebprint >>
与在任何其他上下文中使用打开文件没有区别。请参阅链接的重复帖子,了解您没有明确关闭的打开文件发生的情况的详细信息。 - Martijn Pieters