Comment copier tous les fichiers présents dans un répertoire dans un autre répertoire en utilisant Python. J'ai le chemin source et le chemin de destination sous forme de chaîne.
Vous pouvez utiliser os.listdir () pour obtenir les fichiers dans le répertoire source, os.path.isfile () pour voir s'il s'agit de fichiers normaux (y compris des liens symboliques sur les systèmes * nix) et shutil.copy pour effectuer la copie.
Le code suivant copie uniquement les fichiers normaux du répertoire source dans le répertoire de destination (je suppose que vous ne voulez pas copier de sous-répertoires).
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 devrait-il être quelque chose comme C: \ mon dossier ou C: \ mon dossier \ nomfichier.ext?
Steve Byrne
4
@StevenByrne Peut être l'un ou l'autre, selon que vous souhaitez également renommer le fichier. Sinon, alors destest le nom du répertoire. shutil.copy(src, dst)"copie le fichier src dans le fichier ou répertoire dst .... Si dst spécifie un répertoire, le fichier sera copié dans dst en utilisant le nom de fichier de base de src."
30
Si vous ne voulez pas copier l'arborescence entière (avec les sous-répertoires, etc.), utilisez ou glob.glob("path/to/dir/*.*")pour obtenir une liste de tous les noms de fichiers, parcourez la liste et utilisez shutil.copypour copier chaque fichier.
for filename in glob.glob(os.path.join(source_dir,'*.*')):
shutil.copy(filename, dest_dir)
Remarque: vous devrez peut-être vérifier les résultats globaux avec os.path.isfile () pour vous assurer qu'il s'agit de noms de fichiers. Voir aussi la réponse de GreenMatt. Bien que glob ne renvoie que le nom de fichier comme os.listdir, il renvoie toujours les noms de répertoires également. Le ' . 'peut suffire, tant que vous n'avez pas de noms de fichiers sans extension ou de points dans les noms de répertoire.
Il pourrait être utile de donner une explication verbale de votre code
calico_
1
Je pense que vous voulez dire écraser , pas remplacer
Mohammad ElNesr
Bonne réponse Konstantin !! m'a beaucoup aidé. Une suggestion cependant: utiliser os.sep au lieu de '/' (cela fonctionne donc sur un système d'exploitation non 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)
Voici un autre exemple de fonction de copie récursive qui vous permet de copier le contenu du répertoire (y compris les sous-répertoires) un fichier à la fois, que j'ai utilisé pour résoudre ce problème.
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)
EDIT: Si vous le pouvez, utilisez certainement shutil.copytree(src, dest). Cela nécessite cependant que ce dossier de destination n'existe pas déjà. Si vous devez copier des fichiers dans un dossier existant, la méthode ci-dessus fonctionne bien!
Réponses:
Vous pouvez utiliser os.listdir () pour obtenir les fichiers dans le répertoire source, os.path.isfile () pour voir s'il s'agit de fichiers normaux (y compris des liens symboliques sur les systèmes * nix) et shutil.copy pour effectuer la copie.
Le code suivant copie uniquement les fichiers normaux du répertoire source dans le répertoire de destination (je suppose que vous ne voulez pas copier de sous-répertoires).
la source
dest
est le nom du répertoire.shutil.copy(src, dst)
"copie le fichier src dans le fichier ou répertoire dst .... Si dst spécifie un répertoire, le fichier sera copié dans dst en utilisant le nom de fichier de base de src."Si vous ne voulez pas copier l'arborescence entière (avec les sous-répertoires, etc.), utilisez ou
glob.glob("path/to/dir/*.*")
pour obtenir une liste de tous les noms de fichiers, parcourez la liste et utilisezshutil.copy
pour copier chaque fichier.la source
Regardez shutil dans la documentation Python , en particulier la commande copytree .
la source
la source
la source
Voici un autre exemple de fonction de copie récursive qui vous permet de copier le contenu du répertoire (y compris les sous-répertoires) un fichier à la fois, que j'ai utilisé pour résoudre ce problème.
EDIT: Si vous le pouvez, utilisez certainement
shutil.copytree(src, dest)
. Cela nécessite cependant que ce dossier de destination n'existe pas déjà. Si vous devez copier des fichiers dans un dossier existant, la méthode ci-dessus fonctionne bien!la source