Recentemente desenvolvi um script com as funções de renomear determinados arquivos e move-los para backup. Durante o desenvolvimento descobri algumas coisas interessantes, até pelo fato de não ser um expert em python.
Pré-requisitos
- Python 2.5
- Windows XP
Problema
Ao terminar de escrever o script tentei rodar o mesmo e apareceu a seguinte singela mensagem.
#Erro WindowsError: [Error 2] O sistema não pode encontrar o arquivo especificado
Solução
Para resolver este problema no Windows foi necessário adicionar o diretório ao nome do arquivo.
Exemplo:
os.rename(‘C:nome_do_diretorio’ + oldname, ‘C:nome_do_diretorio’ + newname)
Descoberta
Durante este processo de renomear o arquivo coloquei um diretório diferente para o novo nome do arquivo.
Exemplo:
os.rename(‘C:nome_do_diretorio’ + oldname, ‘C:diretorio_diferente’ + newname)
Para minha surpresa a função Rename() renomeu o arquivo e o MOVEU para o diretório definido.
Estudando um pouco mais sobre a função rename descobri que na realidade ela implementa a função MoveFile() dentro de si a qual permite mover os arquivos.
Indo mais profundamente no assunto, encontrei um patche criado por Raghuram Devarakonda para resolver o problema com o windows . Embora o patche tenha gerado uma “discussão” em torno desta implementação, ela é funcional.
Se desejar utilizar o patche leia na integra todo o assunto: http://bugs.python.org/issue1704547
Função Rename em atividade
Segue o script completo:
#---------------------------------------------------------------------- # Created by: Razec #---------------------------------------------------------------------- #Esta função altera o nome do arquivo antigo, adicionando a sigla RZC. #Em seguida adiciona move o arquivo para outro diretório. #---------------------------------------------------------------------- import os #Arquivo renomeado. def renameMoveFiles(): #Local que contém os arquivos a serem alterados. filename = 'C:temp' movefilename = 'C:temptest' #Lista todos os arquivos do diretório. for oldname in os.listdir(filename): #Adiciona RZC_ no nome do arquivo. newname = 'RZC_' + oldname #Adiciona o diretório ao arquivo. oldname = os.path.join(filename, oldname) #Esta definido outro diretório para observar o arquivo sendo renomeado e movido para outro local newname = os.path.join(movefilename, newname) #Renomeia todos arquivos os.rename(oldname, newname) print("Renamed") #---MAIN--- def main(): #Chama a função acima. renameMoveFiles() if __name__ == "__main__": main()
Bons testes e novas descobertas fique a vontade para comentar. Documentação: http://docs.python.org/library/os.html
Leave a Reply