Mover todos los archivos de un directorio a otro usando Python

5 minutos de lectura

avatar de usuario
malina

Quiero mover todos los archivos de texto de una carpeta a otra usando Python. Encontré este código:

import os, shutil, glob

dst="/path/to/dir/Caches/com.apple.Safari/WebKitCache/Version\ 4/Blobs "
try:
    os.makedirs(/path/to/dir/Tumblr/Uploads) # create destination directory, if needed (similar to mkdir -p)
except OSError:
    # The directory already existed, nothing to do
    pass

for txt_file in glob.iglob('*.txt'):
    shutil.copy2(txt_file, dst)

Me gustaría que moviera todos los archivos en el Blob carpeta. No recibo un error, pero tampoco está moviendo los archivos.

avatar de usuario
Shivkumar Kondi

Prueba esto:

import shutil
import os
    
source_dir="/path/to/source_folder"
target_dir="/path/to/dest_folder"
    
file_names = os.listdir(source_dir)
    
for file_name in file_names:
    shutil.move(os.path.join(source_dir, file_name), target_dir)

  • Nota: Lo anterior voluntad mover archivos recursivamente desde el origen al destino. Además, en mi prueba, al código anterior le falta una barra diagonal en ambos source y dest1.

    – Dan Nissenbaum

    1 de mayo de 2018 a las 4:10

  • ¿Esto mueve los subdirectorios (y/o los archivos dentro de ellos) a la carpeta de destino?

    – daniel brandstetter

    24 de octubre de 2019 a las 13:23

  • @danielbrandstetter shutil.move(src, dst): Mueve recursivamente un archivo o directorio (src) a otra ubicación (dst).

    – mcmayer

    2 de junio de 2020 a las 16:17

  • Necesitas ‘/’ al final de las rutas srouce y dest1. También shutil.move(source+f, dest1) esto debería ser shutil.move(source+f, dest1+f) para ser más seguro. De lo contrario, todos source+f se convierte en un archivo con ruta dest1

    – Tomás

    4 de junio de 2020 a las 10:53


  • Entonces, en resumen, si también desea mover los subdirectorios, use: for f en los archivos: shutil.move(os.path.join(source, f), os.path.join(dest1,f))

    – Deskjokey

    2 de agosto de 2020 a las 1:25


avatar de usuario
Umar.H

sorprendido, esto no tiene una respuesta usando pathilib que se introdujo en python 3.4+

adicionalmente, shutil actualizado en python 3.6 para aceptar un objeto pathlib más detalles en este PEP-0519

Pathlib

from pathlib import Path

src_path="\tmp\files_to_move"

for each_file in Path(src_path).glob('*.*'): # grabs all files
    trg_path = each_file.parent.parent # gets the parent of the folder 
    each_file.rename(trg_path.joinpath(each_file.name)) # moves to parent folder.

Pathlib & shutil para copiar archivos.

from pathlib import Path
import shutil

src_path="\tmp\files_to_move"
trg_path="\tmp"

for src_file in Path(src_path).glob('*.*'):
    shutil.copy(src_file, trg_path)

  • Gracias, esto era exactamente lo que estaba buscando!

    – edo101

    2 de julio de 2020 a las 0:08

  • Creo que quieres decir aquí para hacer Path(src_path).glob('*.*')?

    – emmagras

    9 oct 2020 a las 14:33


  • Path también implementa un método llamado iterdirpor si no quieres .glob('*.*') docs.python.org/3/library/pathlib.html#pathlib.Path.iterdir

    – emmagras

    9 oct 2020 a las 14:34

  • @emmagras buena captura, siéntete libre de editar la próxima vez 🙂 también tienes rglob para rastrear una estructura de directorios.

    – Umar.H

    9 oct 2020 a las 14:42


avatar de usuario
Raquel M. Carmena

Por favor, eche un vistazo a la implementación de la árbol de copia función que:

  • Listar archivos de directorio con:

    names = os.listdir(src)

  • Copiar archivos con:

for name in names:
  srcname = os.path.join(src, name)
  dstname = os.path.join(dst, name)
  copy2(srcname, dstname)

Consiguiendo nombredst no es necesario, porque si el parámetro de destino especifica un directorio, el archivo se copiará en horario de verano utilizando el nombre de archivo base de srcname.

Reemplazar copia2 por Muevete.

avatar de usuario
Para nosotros si

Copiar el archivo “.txt” de una carpeta a otra es muy simple y la pregunta contiene la lógica. Solo la parte que falta está sustituyendo con la información correcta de la siguiente manera:

import os, shutil, glob

src_fldr = r"Source Folder/Directory path"; ## Edit this

dst_fldr = "Destiantion Folder/Directory path"; ## Edit this

try:
  os.makedirs(dst_fldr); ## it creates the destination folder
except:
  print "Folder already exist or some error";

las siguientes líneas de código copiarán el archivo con archivos de extensión *.txt de src_fldr a dst_fldr

for txt_file in glob.glob(src_fldr+"\\*.txt"):
    shutil.copy2(txt_file, dst_fldr);

avatar de usuario
tecnico

Esto debería funcionar. Lea también el documentación del módulo shutil para elegir la función que se ajuste a sus necesidades (shutil.copy(), shutil.copy2(), shutil.copyfile() o shutil.move()).

import glob, os, shutil

source_dir="/path/to/dir/with/files" #Path where your files are at the moment
dst="/path/to/dir/for/new/files" #Path you want to move your files to
files = glob.iglob(os.path.join(source_dir, "*.txt"))
for file in files:
    if os.path.isfile(file):
        shutil.copy2(file, dst)

  • pero ¿dónde defino el nuevo destino para los archivos txt?

    – malina

    24 de enero de 2017 a las 11:31

avatar de usuario
daniel adenew

import shutil 
import os 
import logging

source="/var/spools/asterisk/monitor" 
dest1 = '/tmp/'


files = os.listdir(source)

for f in files:
        shutil.move(source+f, dest1)

logging.basicConfig(filename="app.log", filemode="w", format="%(name)s
- %(levelname)s - %(message)s")

logging.info('directories moved')

Un poco de código cocinado con función de registro. También puede configurar esto para que se ejecute en algún período de tiempo usando crontab.

* */1 * * * python /home/yourprogram.py > /dev/null 2>&1

corre cada hora! salud

  • pero ¿dónde defino el nuevo destino para los archivos txt?

    – malina

    24 de enero de 2017 a las 11:31

avatar de usuario
Balasó

Prueba esto:

 if os.path.exists(source_dir):
    try:
        file_names = os.listdir(source_dir)
        if not os.path.exists(target_dir):
            os.makedirs(target_dir)
        for file_name in file_names:
            shutil.move(os.path.join(source_dir, file_name), target_dir)
    except OSError as e:
        print("Error: %s - %s." % (e.filename, e.strerror))
else:
    log.debug(" Directory not exist {}".format(source_dir))

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad