Pregunta Cómo mover un archivo en Python


Miré en el Python os interfaz, pero no pudo encontrar un método para mover un archivo. ¿Cómo haría el equivalente de $ mv ... en Python?

>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder

532
2018-01-13 22:17


origen


Respuestas:


os.rename() o shutil.move()

Ambos emplean la misma sintaxis:

import os
import shutil

os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")

Tenga en cuenta que en ambos casos, el directorio en el que se crea el nuevo archivo ya debe existir, (pero, en Windows, un archivo con ese nombre no debe o se generará una excepción). Tenga en cuenta también que debe incluir el nombre del archivo (file.foo) tanto en los argumentos de origen como de destino. Si se cambia, el archivo cambiará de nombre o se moverá.

Como se ha observado en los comentarios sobre otras respuestas, shutil.move simplemente llamadas os.rename en la mayoría de los casos. Sin embargo, si el destino está en un disco diferente de la fuente, en su lugar, copiará y luego eliminará el archivo fuente.


774
2018-01-13 22:19



A pesar de que os.rename() y shutil.move() ambos cambiarán el nombre de los archivos, el comando más cercano al comando Unix mv es shutil.move(). La diferencia es que os.rename() no funciona si la fuente y el destino están en discos diferentes, mientras shutil.move() no importa en qué disco están los archivos.


190
2018-05-30 21:12



Para os.rename o shutil.move necesitarás importar el módulo. No * carácter es necesario para obtener todos los archivos movidos.

Tenemos una carpeta en / opt / awesome llamada source con un archivo llamado awesome.txt.

in /opt/awesome
○ → ls
source
○ → ls source
awesome.txt

python 
>>> source = '/opt/awesome/source'
>>> destination = '/opt/awesome/destination'
>>> import os
>>> os.rename(source, destination)
>>> os.listdir('/opt/awesome')
['destination']

Usamos os.listdir para ver que el nombre de la carpeta de hecho cambió. Aquí está el shutil moviendo el destino de regreso a la fuente.

>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']

Esta vez revisé dentro de la carpeta fuente para asegurarme de que el archivo awesome.txt que creé existe. Está ahí :)

Ahora hemos movido una carpeta y sus archivos de un origen a un destino y viceversa.


30
2018-02-22 02:30



La respuesta aceptada no es la correcta, porque la pregunta no es sobre cambiar el nombre de un archivo a un archivo, sino mover muchos archivos a un directorio. shutil.move hará el trabajo, pero para este propósito os.rename es inútil (como se indica en los comentarios) porque el destino debe tener un nombre de archivo explícito.


8
2017-10-17 14:23



Esto es lo que estoy usando en este momento:

import os, shutil
path = "/volume1/Users/Transfer/"
moveto = "/volume1/Users/Drive_Transfer/"
files = os.listdir(path)
files.sort()
for f in files:
    src = path+f
    dst = moveto+f
    shutil.move(src,dst)

Ahora completamente funcional. Espero que esto te ayude.


8
2017-11-12 19:02



  import os,shutil

  current_path = "" ## source path

  new_path = "" ## destination path

  os.chdir(current_path)

  for files in os.listdir():

        os.rename(files, new_path+'{}'.format(f))
        shutil.move(files, new_path+'{}'.format(f)) ## to move files from 

diferentes discos ex. C: -> D:


0
2018-05-07 12:06



Basado en la respuesta descrito aquí, utilizando subprocess es otra opción.

Algo como esto:

subprocess.call("mv %s %s" % (source_files, destination_folder), shell=True)

Tengo curiosidad por saber los pro y los contras de este método en comparación con shutil. Dado que en mi caso ya estoy usando subprocess por otras razones y parece funcionar, me inclino a seguir con esto.

¿Es dependiente del sistema tal vez?


0
2018-06-16 01:50