2010-08-03 6 views
51

Comment copier tous les fichiers d'un répertoire à un autre en python. J'ai le chemin source et le chemin de destination dans une chaîne.copier plusieurs fichiers en python

+0

[Comment copier un répertoire entier de fichiers dans un répertoire existant en utilisant Python?] (Http://stackoverflow.com/questions/1868714/how-do-i-copy -an-whole-directory-of-files-into-a-existing-directory-using-pyth) –

Répondre

69

Vous pouvez utiliser os.listdir() pour obtenir les fichiers dans le répertoire source, os.path.isfile() pour voir si elles sont des fichiers réguliers (y compris des liens symboliques sur les systèmes * nix) et shutil.copy faire la copie.

Le code suivant copie uniquement les fichiers ordinaires du répertoire source dans le répertoire de destination (je suppose que vous ne souhaitez pas que des sous-répertoires soient copiés).

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) 
7

Regardez la commande copytree.

+0

Bonne remarque, mais ce n'est peut-être pas une option si le répertoire existe déjà pour une raison quelconque, comme dans mon cas. – Sven

12

Si vous ne souhaitez pas copier l'intégralité de l'arborescence (avec des sous-répertoires, etc.), utilisez ou glob.glob("path/to/dir/*.*") pour obtenir une liste de tous les noms de fichiers, bouclez sur la liste et utilisez shutil.copy pour copier chaque fichier.

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

Remarque: Vous devrez peut-être vérifier les résultats glob avec os.path.isfile() pour être sûr qu'ils sont des noms de fichiers. Voir aussi la réponse de GreenMatt. Alors que glob renvoie uniquement le nom de fichier comme os.listdir, il renvoie également les noms de répertoires. Le modèle '*. *' Peut suffire, tant que vous n'avez pas de noms de fichiers sans extension, ou de points dans les noms de répertoires. – 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

Il pourrait aider à donner une explication verbale de votre code –

+0

Je pense que vous voulez dire ** écraser **, pas ** déroger ** –

Questions connexes