0

我使用以下代码读取 csv 文件

f = csv.reader(open(filename, 'rb'))

那我就没办法关闭了filename,对吧?这样做有什么害处还是有更好的阅读方式?

4

1 回答 1

4

有,使用上下文管理器

with open(filename, 'rb') as handle: 
    f = csv.reader(handle)

通常,打开的未使用文件描述符是资源泄漏,应该避免。


有趣的是,在文件的情况下,至少文件描述符被释放,只要不再引用文件(另见这个答案):

#!/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)
于 2013-09-15T18:30:36.357 回答