Python csv读取文件,如果我不关闭文件怎么办?

时间:2013-09-15 18:29:09

标签: python csv

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

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

然后我无法关闭filename,对吗?这样做有什么害处,还是有更好的阅读方式?

1 个答案:

答案 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)