2010-08-03 23 views
51

Cómo copiar todos los archivos de un directorio a otro en python. Tengo la ruta de origen y la ruta de destino en una cadena.copiar varios archivos en python

+0

[¿Cómo puedo copiar un directorio completo de archivos en un directorio existente usando Python?] (Http://stackoverflow.com/questions/1868714/how-do-i-copy -un-directorio-completo-de-archivos-en-un-directorio-existente-utilizando-pyth) –

Respuesta

69

Puede utilizar os.listdir() para obtener los archivos en el directorio de origen, os.path.isfile() para ver si son archivos normales (incluyendo enlaces simbólicos en sistemas * nix), y shutil.copy hacer la copia.

El siguiente código copia solo los archivos normales del directorio de origen en el directorio de destino (supongo que no desea copiar ningún subdirectorio).

import os 
import shutil 
src_files = os.listdir(src) 
for file_name in src_files: 
    full_file_name = os.path.join(src, file_name) 
    if (os.path.isfile(full_file_name)): 
     shutil.copy(full_file_name, dest) 
12

Si no desea copiar todo el árbol (con subdirectorios, etc.), use o glob.glob("path/to/dir/*.*") para obtener una lista de todos los nombres de archivo, recorra la lista y use shutil.copy para copiar cada archivo.

for filename in glob.glob(os.path.join(source_dir, '*.*')): 
    shutil.copy(filename, dest_dir) 
+1

Nota: es posible que deba verificar los resultados globales con os.path.isfile() para asegurarse de que sean nombres de archivo. Ver también la respuesta de GreenMatt. Si bien glob solo devuelve el nombre de archivo como os.listdir, también devuelve nombres de directorio. El patrón '*. *' Podría ser suficiente, siempre que no tenga nombres de archivo sin extensión o puntos en los nombres de los directorios. – Steven

0
import os 
import shutil 
os.chdir('C:\\') #Make sure you add your source and destination path below 

dir_src = ("C:\\foooo\\") 
dir_dst = ("C:\\toooo\\") 

for filename in os.listdir(dir_src): 
    if filename.endswith('.txt'): 
     shutil.copy(dir_src + filename, dir_dst) 
    print(filename) 
1
def recursive_copy_files(source_path, destination_path, override=False): 
""" 
Recursive copies files from source to destination directory. 
:param source_path: source directory 
:param destination_path: destination directory 
:param override if True all files will be overridden otherwise skip if file exist 
:return: count of copied files 
""" 
files_count = 0 
if not os.path.exists(destination_path): 
    os.mkdir(destination_path) 
items = glob.glob(source_path + '/*') 
for item in items: 
    if os.path.isdir(item): 
     path = os.path.join(destination_path, item.split('/')[-1]) 
     files_count += recursive_copy_files(source_path=item, destination_path=path, override=override) 
    else: 
     file = os.path.join(destination_path, item.split('/')[-1]) 
     if not os.path.exists(file) or override: 
      shutil.copyfile(item, file) 
      files_count += 1 
return files_count 
+1

Podría ayudar dar una explicación verbal de su código –

+0

Creo que quiere decir ** sobrescribir **, no ** anular ** –