J'essaie de comprendre comment copier des dessins CAO (« .dwg », » .dxf) à partir d'un répertoire source des sous-dossiers dans un répertoire de destination et le maintien de la répertoire d'origine et la structure des sous-dossiersPython shutil copytree: utilisez ignorer fonction pour conserver les fichiers spécifiques types
- Répertoire d'origine:. H: \ Tanzanie ... \ Bagamoyo_Single_line.dwg
- Source Répertoire: H: \ CAD \ Tanzanie ... \ Bagamoyo_Single_line.dwg
J'ai trouvé la réponse suivante de @martineau dans le foll poste vu: Python Factory Function
from fnmatch import fnmatch, filter
from os.path import isdir, join
from shutil import copytree
def include_patterns(*patterns):
"""Factory function that can be used with copytree() ignore parameter.
Arguments define a sequence of glob-style patterns
that are used to specify what files to NOT ignore.
Creates and returns a function that determines this for each directory
in the file hierarchy rooted at the source directory when used with
shutil.copytree().
"""
def _ignore_patterns(path, names):
keep = set(name for pattern in patterns
for name in filter(names, pattern))
ignore = set(name for name in names
if name not in keep and not isdir(join(path, name)))
return ignore
return _ignore_patterns
# sample usage
copytree(src_directory, dst_directory,
ignore=include_patterns('*.dwg', '*.dxf'))
Mise à jour: 18h21. Le code suivant fonctionne comme prévu, sauf que je voudrais ignorer les dossiers qui ne contiennent pas de include_patterns (« .dwg », « .dxf »)
Ce code est déjà montrant comment le faire. Vous passez les modèles à 'include_patterns', et le retour est un callback que vous passez à' copytree'. 'copytree' fait le travail de passer des chemins et des noms à la fonction' _ignore_patterns' résultante comme elle traverse l'arbre. – ShadowRanger
Salut @ShadowRanger Je comprends maintenant comment cela fonctionne. Je dois modifier le suivant seulement pour copier l'arbre s'il y a une correspondance basée sur mes include_patterns pour que je ne finisse pas avec des répertoires vides. –