os.walk только .jpg

Мне нужны только имена файлов, которые заканчиваются на .jpg или .pdf. Как ограничить поиск имени файла?

import os
from subprocess import call

for dirname, dirnames, filenames in os.walk('.'):
    for filename in filenames:
        jpg = os.path.join(dirname, filename)
        call(["./curl_recognize.sh", jpg, jpg+".txt", "-f txt"])

person David Vasandani    schedule 14.12.2012    source источник
comment
Другой вариант - использовать find с -exec в bash или что-то в этом роде.   -  person Jon Clements♦    schedule 14.12.2012


Ответы (3)


import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print file

fnmatch лучше, чем другие методы, поскольку он предполагает, что Unix, как подстановочный знак, включает:

*= соответствует всему

?= соответствует любому одиночному символу

[seq]= соответствует любому символу в seq

[!seq]= соответствует любому символу, не указанному в seq

person ray_linn    schedule 14.12.2012

Как насчет:

for filename in filenames:
  if not filename.endswith('.jpg'):
    continue
person larsks    schedule 14.12.2012

Если вам нужен список всех файлов в конце, вы можете сделать что-то вроде этого

filelist = []
for root, dirs, files in os.walk('.'):
    filelist = filelist + [os.path.join(x,root) for x in files if x.endswith(('.jpg','.pdf'))]   
person oathead    schedule 14.12.2012