2016-10-05 4 views
-1

В Windows, если я побежал:.Найти конкретные файлы в подкаталогах с помощью Python os.walk

реж NP _ ??? LAS

Я получаю 2 файла:

NP_123.LAS

NP_1234.LAS

Использование fmatch с NP _ ????. Маска LAS Я получаю только NP_1234.LAS, а не NP_123.LAS.

Ниже код I'm работает:

def FindFiles(directory, pattern): 
    flist=[] 
    for root, dirs, files in os.walk(directory): 
     for filename in fnmatch.filter(files, pattern): 
      flist.append(os.path.join(root, filename)) 
    return flist 

подмигнули можно изменить, чтобы получить тот же список файлов, как команда дир, используя только один шаблон?

+0

Модуль [pathlib] (https://docs.python.org/3/library/pathlib.html#basic-use) может вам помочь. –

ответ

0

Вы можете использовать re, чтобы предоставить вам больше гибкости, разрешив фактические регулярные выражения. Регулярное выражение «[0-9] {3,4}» соответствует 3 или 4-значным номерам.

def FindFiles(directory, pattern): 
    flist=[] 
    for root, dirs, files in os.walk(directory): 
     prog = re.compile("NP_[0-9]{3,4}.txt") 
     for filename in filter(prog.match, files): 
      flist.append(os.path.join(root, filename)) 
    return flist