Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

532
Vistas
Python 3.6 glob incluye archivos y carpetas ocultos

Intento recorrer todos los archivos que coinciden con una determinada extensión, incluidos los que se encuentran dentro de carpetas ocultas. Hasta ahora no he encontrado una manera de hacer esto con iglob . Esto funciona para todas las carpetas excepto aquellas que comienzan con un punto:

 import glob for filename in glob.iglob('/path/**/*.ext', recursive=True): print(filename)

He intentado agregar el punto como un carácter opcional sin éxito. Realmente me gustaría usar glob en lugar de residir en os.walk .

Cómo incluir todos los archivos/carpetas, incluso aquellos que comienzan con . , con glob ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tuve este mismo problema y deseaba que glob.glob tuviera un parámetro opcional para incluir archivos de puntos. Quería poder incluir TODOS los archivos de puntos en TODOS los directorios, incluidos los directorios que comienzan con punto. Simplemente no es posible hacer esto con glob.glob. Sin embargo, descubrí que Python tiene un módulo estándar pathlib que tiene una función global que funciona de manera diferente, incluirá archivos de puntos. La función opera de manera un poco diferente, en particular, no devuelve una lista de cadenas, sino objetos de ruta. Sin embargo, usé lo siguiente

 files=[] file_refs = pathlib.Path(".").glob(pattern) for file in file_refs: files.append(str(file))

La otra diferencia notable que encontré fue un patrón global que termina con **. Esto no devolvió nada en la versión de pathlib pero devolvería todos los archivos en la versión glob.glob. Para obtener los mismos resultados, agregué una línea para verificar si el patrón terminaba con ** y, de ser así, le agregué /*.

El siguiente código es un reemplazo para su ejemplo que incluye los archivos en directorios que comienzan con punto

 import pathlib for fileref in pathlib.Path('/path/').glob('**/*.ext'): filename = str(fileref) print(filename)
over 4 years ago · Santiago Trujillo Denunciar

0

De https://docs.python.org/3/library/glob.html

Tenga en cuenta que, a diferencia de fnmatch.fnmatch(), glob trata los nombres de archivo que comienzan con un punto (.) como casos especiales.

Si el directorio contiene archivos que comienzan con . no coincidirán de forma predeterminada. Por ejemplo, considere un directorio que contenga card.gif y .card.gif:

 import glob glob.glob('*.gif') # ['card.gif'] glob.glob('.c*') # ['.card.gif']

Por lo que veo, se requieren dos globos separados para obtener los ocultos y los no ocultos, por ejemplo, usando https://stackoverflow.com/a/4829130/4130619 .

over 4 years ago · Santiago Trujillo Denunciar

0

Agregar una respuesta para la pregunta de recompensa; obteniendo el resultado de archivos ocultos y no ocultos en un solo comando.

Como mencionó la actividad de @reducidng, glob treats . archivos como un caso de uso especial. Para obtener archivos normales y ocultos en un solo ciclo, podemos usar itertools.chain con iteradores glob.iglob . por ejemplo,

 → ls -A .chen file.text so1.py >>> import glob, itertools >>> for i in itertools.chain(glob.iglob('**'), glob.iglob('.**')): ... print(i) ... file.text so1.py .chen # If you want it as a variable, you can list() it. >>> l = list(itertools.chain(glob.iglob('**'), glob.iglob('.**'))) >>> l ['file.text', 'so1.py', '.chen'] >>>

Nota: no funciona completamente (todavía). Digamos que tiene .hello , .dot/hello.txt , .dot/.hello.txt , nodot/hello.txt , nodot/.hello.txt . Entonces tampoco:

 itertools.chain(glob.iglob('**', recursive=True), glob.iglob('.**', recursive=True))

ni

 itertools.chain(glob.iglob('**/*', recursive=True), glob.iglob('.**/*', recursive=True))

dar todos los archivos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda