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.
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.
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).
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
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 utilisez shutil.copy
pour copier chaque fichier.
for filename in glob.glob(os.path.join(source_dir, '*.*')):
shutil.copy(filename, dest_dir)
Regardez shutil dans la documentation Python , en particulier la commande copytree .
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
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 it
if 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!