Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

856
Views
Python shutil copytree: use la función ignorar para mantener tipos de archivos específicos

Estoy tratando de descubrir cómo copiar dibujos CAD (".dwg", ".dxf) desde un directorio de origen con subcarpetas a un directorio de destino y mantener la estructura original de directorios y subcarpetas.

  • Directorio original: H:\Tanzania...\Bagamoyo_Single_line.dwg
  • Directorio de origen: H:\CAD\Tanzania...\Bagamoyo_Single_line.dwg

Encontré la siguiente respuesta de @martineau en la siguiente publicación: 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'))

Actualizado: 18:21. El siguiente código funciona como se esperaba, excepto que me gustaría ignorar las carpetas que no contienen include_patterns(' .dwg', ' .dxf')

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

shutil ya contiene una función ignore_patterns , por lo que no es necesario que proporcione la suya propia. Directamente de la documentación :

 from shutil import copytree, ignore_patterns copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

Esto copiará todo excepto los archivos .pyc y los archivos o directorios cuyo nombre comience con tmp.

Es un poco complicado (y no estrictamente necesario) explicar lo que está pasando: ignore_patterns devuelve una función _ignore_patterns como su valor de retorno, esta función se mete en copytree como un parámetro, y copytree llama a esta función según sea necesario, por lo que no tiene saber o preocuparse cómo llamar a esta función _ignore_patterns . Simplemente significa que puede excluir ciertos archivos cruft innecesarios (como *.pyc ) para que no se copien. El hecho de que el nombre de la función _ignore_patterns comience con un guión bajo es una pista de que esta función es un detalle de implementación que puede ignorar.

copytree espera que el destination de la carpeta aún no exista. No es un problema que esta carpeta y sus subcarpetas surjan una vez que copytree comience a funcionar, copytree sabe cómo manejar eso.

Ahora include_patterns está escrito para hacer lo contrario: ignorar todo lo que no está incluido explícitamente. Pero funciona de la misma manera: simplemente lo llama, devuelve una función oculta y coptytree sabe qué hacer con esa función:

 copytree(source, destination, ignore=include_patterns('*.dwg', '*.dxf'))
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!