Sobrescrever arquivos com os.rename. (Python)

A função rename, como o próprio nome sugere, vai renomear um arquivo. Todavia, ela retorna o seguinte erro, caso o arquivo destino exista: “[WinError 183] Cannot create a file when that file already exists…“. Neste post mostro como contornar este problema.

Até o momento, não existe uma forma de forçar que a função rename sobrescreva o arquivo destino (ou o novo nome do arquivo). Todavia, temos duas opções simples para contornar este problema.

 

Removendo o novo arquivo, caso exista.

 

No código acima:

  1. Defino uma variável com o nome atual do arquivo (current_filename);
  2. Outra variável com o novo nome do arquivo (new_filename);
  3. Verifico se já existe um arquivo com o nome que eu desejo utilizar (os.path.exists(new_filename);
  4. Se existir, utilizo a função remove para apagar este arquivo;
  5. Por último, utilizo a função rename para renomear o arquivo  desejado;

 

É uma abordagem simples, que não exige a utilização de pacotes extras e que não adiciona tanto código assim. Dependendo do caso, você pode fazer uma função recursiva para gerar um backup do arquivo que já está com o novo nome. Tudo vai depender da sua aplicação.

 

Utilizando o pacote shutil

 

No código acima, utilizo a função move do pacote shutil. Por padrão, ele substitui o arquivo destino, caso ele já exista.

Esta é uma forma ainda mais simples que a anterior, mas te da menos controle sobre o que está acontecendo. Com esta abordagem, você não consegue fazer um backup do arquivo, caso já exista algum com o nome que você deseja utilizar.

 

Independente da abordagem que  você vai escolher, cuidado para não substituir um arquivo importante!

 

Espero ter ajudado!

 

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, Python and tagged , , , , , .