是否打开()。read()安全?
我写了很多Python代码,我只是想将一个文件读入一个变量。我知道推荐的两种方式是这些 -是否打开()。read()安全?
with open('file') as f:
data = f.read()
# or
fo = open('file')
data = f.read()
fo.close()
我的问题,这是什么缺点?
data = open('file').read()
的
data = open('file').read()
缺点是取决于你的Python实现,打开的文件对象的清理可能会或可能不会立刻发生。这意味着文件将保持打开状态,并消耗文件句柄。这对单个文件来说可能不是问题,但是在循环中肯定会遇到麻烦。
具体而言,CPython(通常的Python实现)使用引用计数的对象,因此文件几乎可以确切地关闭将立即发生。但是,对于其他实现(例如IronPython或Jython),这不一定是正确的。
感谢您的解释:) – FakeRainBrigand 2012-03-22 23:49:04
缺点是后两种,第一,你可以肯定,你的文件被关闭第二块。 (在第一种情况下,即使发生异常也是如此)。
简短的表格不会给你任何这样的保证。
根据an answer在similiar question(这次,涉及写入),主要缺点是您无法控制何时该文件将被关闭。这个问题对写入来说更重要(因为你正在修改文件),但它仍然意味着你有一个未关闭的文件句柄,直到垃圾收集器回收对象。
许多代gcs会立即清除这些类型的对象(在作用域中创建,在作用域的末尾没有剩余的引用),但不能保证。所以,最好坚持明确的文件关闭。
你的意思是“没有明确关闭文件的缺点是什么?” – 2012-03-22 21:53:37
@ will,sorta。我的问题是关于特定的一段代码。你认为我应该改变标题? – FakeRainBrigand 2012-03-22 22:15:07
请注意,''with''选项是优越的,因为它也能正确处理异常。 – 2012-03-22 22:56:43