Python xlrd.Book: como fechar os arquivos?
Eu li 150 arquivos do Excel em um loop, abrindo-os comxlrd.open_workbook()
, que retorna umBook
objeto. No final, quando tenteiumount
não consegui o volume e quando chequei comlsof
, Descobri que 6 dos arquivos ainda estavam abertos:
$ 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
Aqui está a minha função: eu li os arquivos xls com:(despojado para maior clareza)
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()
oBook
objeto não temclose()
, não possui nenhum objeto de tipo de arquivo aberto entre suas propriedades, exceto o stdout. estecomo não fala sobre isso (não encontrou os documentos oficiais). Não vejo como eu poderia fechar o arquivo, e também é estranho que 6 permaneça aberto depois de ler 150 deles.
Editar: pode estar relacionado aesta, mas ainda não deve deixar arquivos abertos e não quero ler todas as planilhas.