我使用以下代码来读取csv文件
f = csv.reader(open(filename, 'rb'))
然后我无法关闭filename
,对吗?这样做有什么害处,还是有更好的阅读方式?
答案 0 :(得分:4)
有,使用context managers:
with open(filename, 'rb') as handle:
f = csv.reader(handle)
通常,打开的未使用文件描述符是资源泄漏,应该避免使用。
有趣的是,在文件的情况下,一旦没有对该文件的引用,至少会释放文件描述符(另请参阅this answer):
#!/usr/bin/env python
import gc
import os
import subprocess
# GC thresholds (http://docs.python.org/3/library/gc.html#gc.set_threshold)
print "Garbage collection thresholds: {}".format(gc.get_threshold())
if __name__ == '__main__':
pid = os.getpid()
print('------- No file descriptor ...')
subprocess.call(['lsof -p %s' % pid], shell=True)
x = open('/tmp/test', 'w')
print('------- Reference to a file ...')
subprocess.call(['lsof -p %s' % pid], shell=True)
x = 2
print('------- FD is freed automatically w/o GC')
subprocess.call(['lsof -p %s' % pid], shell=True)