如果我在函数中打开文件:
In [108]: def foo(fname):
...: f=open(fname)
...: print f
...:
In [109]: foo('t.py')
<open file 't.py', mode 'r' at 0x05DA1B78>
手动关闭f
是否更好?为什么呢?
答案 0 :(得分:3)
最好在完成后关闭文件,因为这是一个好习惯,但这并不是完全必要的,因为垃圾收集器会为你关闭文件。你手动关闭它的原因是要有更多的控制权。您不知道垃圾收集器何时运行。
但更好的是使用python 2.5中引入的with语句。
with open(f_name) as f:
# do stuff with f
# possibly throw an exception
无论在with语句的范围内发生什么,这都会关闭文件。
答案 1 :(得分:1)
是的,最好手动关闭文件,或者在处理文件时更好地使用with
语句(即使发生异常,它也会自动关闭文件)。在CPython中,当垃圾收集器实际销毁文件对象时,将自动关闭未引用的文件对象对象,直到那时任何未刷新的数据/资源仍可能在内存中挂起。
来自docs:
在处理文件时,最好使用 with 关键字 对象。这样做的好处是文件在之后正确关闭 它的套件即使在路上引发异常也会完成。
相关:
答案 2 :(得分:1)
$ cat /proc/sys/fs/file-max
390957
这可能会破坏我的系统(原谅我没有尝试:)):
fs = []
for i in range(390957+1):
fs.append(open(str(i), 'w'))
for f in files:
f.close()
这(希望)不会:
for i in range(390957+1):
with open(str(i), 'w') as f:
# do stuff