Je souhaite copier les fichiers ayant une extension de fichier spécifique dans un nouveau dossier. J'ai une idée comment utiliser os.walk
mais spécifiquement comment pourrais-je l'utiliser? Je recherche les fichiers avec une extension de fichier spécifique dans un seul dossier (ce dossier a 2 sous-répertoires mais les fichiers que je cherche ne seront jamais trouvés dans ces 2 sous-répertoires, donc je n'ai pas besoin de chercher dans ces sous-répertoires) . Merci d'avance.Comment copier des fichiers avec une extension de fichier spécifique dans un dossier de mon script python (version 2.5)?
Répondre
import glob, os, shutil
files = glob.iglob(os.path.join(source_dir, "*.ext"))
for file in files:
if os.path.isfile(file):
shutil.copy2(file, dest_dir)
Lire le documentation du module shutil de choisir la fonction qui correspond à vos besoins (shutil.copy(), shutil.copy2() ou shutil.copyfile()).
Ceci va marcher dans un arbre avec des sous-répertoires. Vous pouvez faire un contrôle os.path.isfile pour le rendre un peu plus sûr.
for root, dirs, files in os.walk(srcDir):
for file in files:
if file[-4:].lower() == '.jpg':
shutil.copy(os.path.join(root, file), os.path.join(dest, file))
c'est une erreur d'utiliser '.lower()' sur les systèmes sensibles à la casse (MS Windows est dominant mais ce n'est pas un monde entier). 'os.path.normcase (fichier)' est préféré à la place. – jfs
Si vous n'êtes pas récursif, vous n'avez pas besoin de walk().
La réponse de Federico avec glob est correcte, en supposant que vous n'allez pas avoir de répertoires appelés 'something.ext'. Sinon, essayez:
import os, shutil
for basename in os.listdir(srcdir):
if basename.endswith('.ext'):
pathname = os.path.join(srcdir, basename)
if os.path.isfile(pathname):
shutil.copy2(pathname, dstdir)
'basename = os.path.normcase (basename)' avant 'basename.endswith' pourrait être utile (sous Windows). – jfs
Voici une version non récurrente avec os.walk
:
import fnmatch, os, shutil
def copyfiles(srcdir, dstdir, filepattern):
def failed(exc):
raise exc
for dirpath, dirs, files in os.walk(srcdir, topdown=True, onerror=failed):
for file in fnmatch.filter(files, filepattern):
shutil.copy2(os.path.join(dirpath, file), dstdir)
break # no recursion
Exemple:
copyfiles(".", "test", "*.ext")
Copier les fichiers avec l'extension "extension" de SRCDIR à dstDir ...
import os, shutil, sys
srcDir = sys.argv[1]
dstDir = sys.argv[2]
extension = sys.argv[3]
print "Source Dir: ", srcDir, "\n", "Destination Dir: ",dstDir, "\n", "Extension: ", extension
for root, dirs, files in os.walk(srcDir):
for file_ in files:
if file_.endswith(extension):
shutil.copy(os.path.join(root, file_), os.path.join(dstDir, file_))
@JF Sebastian: Merci pour les améliorations! –