231 votes

Plusieurs types de fichiers Python glob

Existe-t-il une meilleure façon d'utiliser glob.glob dans python pour obtenir une liste de plusieurs types de fichiers tels que .txt, .mdown et .markdown ? En ce moment, j'ai quelque chose comme ça :

projectFiles1 = glob.glob( os.path.join(projectDir, '*.txt') )
projectFiles2 = glob.glob( os.path.join(projectDir, '*.mdown') )
projectFiles3 = glob.glob( os.path.join(projectDir, '*.markdown') )

221voto

user225312 Points 22699

Peut-être qu'il y a un meilleur moyen, mais que diriez-vous de :

import glob
types = ('*.pdf', '*.cpp') # the tuple of file types
files_grabbed = []
for files in types:
    files_grabbed.extend(glob.glob(files))

# files_grabbed is the list of pdf and cpp files

Peut-être qu'il y a un autre moyen, alors attendez au cas où quelqu'un d'autre trouverait une meilleure réponse.

106voto

patrick-mooney Points 698

glob renvoie une liste : pourquoi ne pas la lancer plusieurs fois et concaténer les résultats ?

from glob import glob
project_files = glob('*.txt') + glob('*.mdown') + glob('*.markdown')

67voto

user2363986 Points 1
from glob import glob

files = glob('*.gif')
files.extend(glob('*.png'))
files.extend(glob('*.jpg'))

print(files)

Si vous avez besoin de spécifier un chemin, bouclez les modèles de correspondance et conservez la jointure à l'intérieur de la boucle pour simplifier :

from os.path import join
from glob import glob

files = []
for ext in ('*.gif', '*.png', '*.jpg'):
   files.extend(glob(join("path/to/dir", ext)))

print(files)

65voto

BPL Points 5420

Autant de réponses qui suggèrent le globbing autant de fois que le nombre d'extensions, je préférerais globbing juste une fois à la place :

from pathlib import Path

files = (p.resolve() for p in Path(path).glob("**/*") if p.suffix in {".c", ".cc", ".cpp", ".hxx", ".h"})

47voto

tzot Points 32224

Enchaîner les résultats :

import itertools as it, glob

def multiple_file_types(*patterns):
    return it.chain.from_iterable(glob.iglob(pattern) for pattern in patterns)

Puis :

for filename in multiple_file_types("*.txt", "*.sql", "*.log"):
    # do stuff

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X