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

539
Views
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 answers
Answer question

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 Report

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 Report

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 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!