Python xlrd.Book: как закрыть файлы?
Я читаю 150 файлов Excel в цикле, открывая их сxlrd.open_workbook()
, который возвращаетBook
объект. В конце, когда я пыталсяumount
громкость, я не смог, и когда я проверил сlsof
Я обнаружил, что 6 файлов все еще открыты:
$ lsof | grep volumename
python2 32349 deeenes mem REG 0,40 138240 181517 /.../150119.xls
python2 32349 deeenes mem REG 0,40 135168 181482 /.../150609.xls
python2 32349 deeenes mem REG 0,40 140800 181495 /.../140828.xls
python2 32349 deeenes 5r REG 0,40 140800 181495 /.../140828.xls
python2 32349 deeenes 6r REG 0,40 135168 181482 /.../150609.xls
python2 32349 deeenes 7r REG 0,40 138240 181517 /.../150119.xls
Вот моя функция, с которой я читаю файлы xls:(раздели для ясности)
import sys
import xlrd
from xlrd.biffh import XLRDError
def read_xls(xls_file, sheet = '', return_table = True):
try:
book = xlrd.open_workbook(xls_file, on_demand = True)
try:
sheet = book.sheet_by_name(sheet)
except XLRDError:
sheet = book.sheet_by_index(0)
table = [[str(c.value) for c in sheet.row(i)] for i in xrange(sheet.nrows)]
if not return_table:
table = None
return table
except IOError:
sys.stdout.write('No such file: %s\n' % xls_file)
sys.stdout.flush()
Book
объект не имеетclose()
метод, ни один не имеет открытых объектов типа файла среди своих свойств, кроме стандартного вывода. этокак не говорит об этом (не нашел официальных документов). Я не вижу, как я мог закрыть файл, и также странно, что 6 остается открытым после прочтения 150 из них.
Редактировать: это может быть связано сэтот, но все равно не следует оставлять открытые файлы, и я не хочу читать все листы.