Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

533
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda