Puede usar os.listdir () para obtener los archivos en el directorio de origen, os.path.isfile () para ver si son archivos normales (incluidos los enlaces simbólicos en los sistemas * nix) y shutil.copy para hacer la copia.
El siguiente código copia solo los archivos normales del directorio de origen al directorio de destino (supongo que no desea que se copien los subdirectorios).
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)
¿Dest debería ser algo como C: \ myfolder o C: \ myfolder \ filename.ext?
Steve Byrne
4
@StevenByrne Puede ser cualquiera, dependiendo de si también desea cambiar el nombre del archivo. Si no es así, entonces destes el nombre del directorio. shutil.copy(src, dst)"copia el archivo src al archivo o directorio dst .... Si dst especifica un directorio, el archivo se copiará en dst usando el nombre de archivo base de src".
30
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.copypara copiar cada archivo.
for filename in glob.glob(os.path.join(source_dir,'*.*')):
shutil.copy(filename, dest_dir)
Nota: Es posible que deba verificar los resultados globales con os.path.isfile () para asegurarse de que sean nombres de archivo. Vea también la respuesta de GreenMatt. Si bien glob devuelve solo el nombre de archivo como os.listdir, también devuelve nombres de directorio. El ' . 'puede ser suficiente, siempre que no tenga nombres de archivo sin extensión o puntos en los nombres de directorio.
Podría ayudar dar una explicación verbal de su código
calico_
1
Creo que te refieres a sobrescribir , no anular
Mohammad ElNesr
Konstantin gran respuesta !! me ayudo mucho. Sin embargo, una sugerencia: usar os.sep en lugar de '/' (por lo que funciona en sistemas operativos que no son Linux)
Ari
4
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)
Aquí hay otro ejemplo de una función de copia recursiva que le permite copiar el contenido del directorio (incluidos los subdirectorios) un archivo a la vez, que utilicé para resolver este problema.
import os
import shutil
def recursive_copy(src, dest):"""
Copy each file from src dir to dest dir, including sub-directories.
"""for item in os.listdir(src):
file_path = os.path.join(src, item)# if item is a file, copy itif os.path.isfile(file_path):
shutil.copy(file_path, dest)# else if item is a folder, recurse elif os.path.isdir(file_path):
new_dest = os.path.join(dest, item)
os.mkdir(new_dest)
recursive_copy(file_path, new_dest)
EDITAR: Si puede, definitivamente solo use shutil.copytree(src, dest). Sin embargo, esto requiere que esa carpeta de destino aún no exista. Si necesita copiar archivos en una carpeta existente, ¡el método anterior funciona bien!
Respuestas:
Puede usar os.listdir () para obtener los archivos en el directorio de origen, os.path.isfile () para ver si son archivos normales (incluidos los enlaces simbólicos en los sistemas * nix) y shutil.copy para hacer la copia.
El siguiente código copia solo los archivos normales del directorio de origen al directorio de destino (supongo que no desea que se copien los subdirectorios).
fuente
dest
es el nombre del directorio.shutil.copy(src, dst)
"copia el archivo src al archivo o directorio dst .... Si dst especifica un directorio, el archivo se copiará en dst usando el nombre de archivo base de src".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 useshutil.copy
para copiar cada archivo.fuente
Mire shutil en los documentos de Python , específicamente el comando copytree .
fuente
fuente
fuente
Aquí hay otro ejemplo de una función de copia recursiva que le permite copiar el contenido del directorio (incluidos los subdirectorios) un archivo a la vez, que utilicé para resolver este problema.
EDITAR: Si puede, definitivamente solo use
shutil.copytree(src, dest)
. Sin embargo, esto requiere que esa carpeta de destino aún no exista. Si necesita copiar archivos en una carpeta existente, ¡el método anterior funciona bien!fuente