Eu estava tentando executar um código onde eu queria ler folhas de excel. O problema era que, se houver um arquivo que não possui uma planilha com o nome digamos: SheetSum Não consigo movê-lo para o local do erro !! O código que escrevi foi:
def read_file(data_file):
# data_file = '\rr\ex.xlsx'
sheets = {}
try:
print("Reading file: "+data_file)
sheets['df_1'] = pd.read_excel(open(data_file,'rb'), 'SheetSum')
except Exception as excpt:
print("Exception occurred", exc_info=True)
return sheets
read_file(file)
shutil.move( file, dirpath +'\\processed_files')
Erro:
[WinError 32] O processo não pode acessar o arquivo porque está sendo usado por outro processo
Eu tive que adicionar um try except with finally
bloco completo e dizer que finally
eu preciso fechar o arquivo em qualquer caso, como:
def read_file(data_file):
# data_file = '\rr\ex.xlsx'
sheets = {}
try:
print("Reading file: "+data_file)
sheets_file = open(data_file,'rb')
sheets['df_1'] = pd.read_excel(sheets_file, 'SheetSum')
except Exception as excpt:
print("Exception occurred", exc_info=True)
finally:
sheets_file.close()
return sheets
read_file(file)
shutil.move( file, dirpath +'\\processed_files')
Caso contrário, o arquivo ainda permanece aberto é o plano de fundo.
Se finally
presente, ele especifica um manipulador de limpeza . A try
cláusula é executada, incluindo as cláusulas any except
e else
. Se uma exceção ocorrer em qualquer uma das cláusulas e não for tratada, a
exceção será salva temporariamente . A finally
cláusula é executada. Se houver uma exceção salva, ela será gerada novamente no final da finally
cláusula. Se a finally
cláusula gerar outra exceção, a exceção salva será configurada como o contexto da nova exceção.
..Mais Aqui