Pat*_*ick 21 python file-io coding-style
我认为这个问题更多的是"编码风格"而不是技术问题.
说我有一行代码:
buf = open('test.txt','r').readlines()
...
Run Code Online (Sandbox Code Playgroud)
文件描述符会自动关闭,还是会留在内存中?如果文件描述符没有关闭,关闭它的首选方法是什么?
sah*_*hhm 39
如果将文件对象分配给变量,则可以使用显式关闭它 .close()
f = open('test.txt','r')
buf = f.readlines()
f.close()
Run Code Online (Sandbox Code Playgroud)
或者(更常见的是首选),您可以使用Python文档中with提到的关键字(Python 2.5和更高版本):
with在处理文件对象时,最好使用关键字.这样做的好处是 文件在套件完成后正确关闭,即使在途中引发了异常.它也比编写等效的try-finally块短得多:
>>> with open('test.txt','r') as f:
... buf = f.readlines()
>>> f.closed
True
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 15
通常在CPython中,当引用计数降至零时,文件立即关闭(尽管未来CPython版本不保证这种行为)
在其他实现中,例如Jython,在收集garbarge之前,文件将不会被关闭,这可能是很长时间之后.
根据实现的行为,使代码工作方式不同是一种糟糕的风格.
如果只是为了一个快速脚本或者你在解释器shell中尝试的东西它已经足够好了,但对于任何类型的制作工作,你通常应该使用一个上下文管理器,就像在Falmarri的答案中一样
它将保留在内存中,直到垃圾收集器关闭它.您应该始终显式关闭文件描述符.做这样的事情:
with open('test.txt', 'r') as f:
buf = f.readlines()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33920 次 |
| 最近记录: |