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.