Mover, cortar o renombrar archivos y carpetas con el modulo shutil

Al llamar a shutil.move(source, destination) se moverá el archivo o la carpeta de la ruta de origen a la ruta de destino y se devolverá una cadena con la ruta absoluta de la nueva ubicación.

Cortando un archivo con python

Si el destino apunta a una carpeta, el archivo de origen se mueve al destino y mantiene su nombre de archivo actual. Por ejemplo, introduzca lo siguiente en el shell interactivo:

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'

Asumiendo que ya existe una carpeta llamada eggs en el directorio C:\, esta llamada de shutil.move() dice: «Mueve C:\bacon.txt a la carpeta C:\eggs«.

Si ya existiera un archivo bacon.txt en C:\eggs, se habría sobrescrito. Dado que es fácil sobrescribir accidentalmente archivos de esta manera, debe tener cierto cuidado cuando utilice move().

Renombrando un archivo

La ruta de destino también puede especificar un nombre de archivo. En el siguiente ejemplo, el archivo fuente se mueve y se renombra.

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'

Esta línea dice: «Mueve C:\bacon.txt a la carpeta C:\eggs, y de paso, renombra ese archivo bacon.txt a new_bacon.txt«.

Los dos ejemplos anteriores funcionaban bajo la suposición de que había una carpeta eggs en el directorio C:\. Pero si no hay una carpeta eggs, entonces move() renombrará bacon.txt a un archivo llamado eggs.

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs'

Aquí, move() no puede encontrar una carpeta llamada eggs en el directorio C:\ y por lo tanto asume que el destino debe estar especificando un nombre de archivo, no una carpeta. Así que el archivo de texto bacon.txt es renombrado a eggs (un archivo de texto sin la extensión de archivo .txt) – ¡probablemente no es lo que usted quería! Esto puede ser un error difícil de detectar en sus programas, ya que la llamada a move() puede hacer felizmente algo que podría ser muy diferente de lo que usted esperaba. Esta es otra razón para tener cuidado al usar move().

Finalmente, las carpetas que conforman el destino deben existir ya, o de lo contrario Python lanzará una excepción. Introduzca lo siguiente en el shell interactivo:

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  --snip--
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'

Python busca eggs y ham dentro del directorio does_not_exist. No encuentra el directorio inexistente, por lo que no puede mover spam.txt a la ruta especificada.

Deja una respuesta