2014-09-01 2 views
1

Я использую os.walk() для получения имени файла. Мне нужно создать список с именами файлов, которые соответствуют следующим шаблонам:Регулярное выражение Python для соответствия имени файла. Использование os.walk() для получения имени файла

если '*' будет соответствовать всем файлам.

если 'h*' будет соответствовать всем файлам, начинающимся с h.

если '*h' будет соответствовать всем файлам, заканчивающимся h.

если '*h*' будет соответствовать всем файлам, в которых есть h.

если [h-w]* будет соответствовать любому символу в наборе, в том числе набора отрицания [^ ч-ш]

Я новичок с регулярным выражением и у меня есть проблемы с созданием, если заявление по этому вопросу. Может кто-нибудь объяснить это мне (возможно, с примерами кода), как это сделать. Благодарю.

+0

'*' не является допустимым регулярным выражением. Может быть, вам нужен шаблон типа 'fnmatch'? –

+0

Кроме того, regex 'h ​​*' соответствует файлам с именем 'h',' hh', 'hhh' и т. Д., Но не файлы других. ** pattern ** 'h *' соответствует именам файлов, начинающимся с 'h'. –

+0

@AvinashRaj, нет - это явно объединяет регулярные выражения с шаблонами стиля fnmatch. '* h' также не является допустимым регулярным выражением - символ' * 'должен иметь что-то еще, предшествующее ему, поскольку он изменяет предыдущий токен на 0 или более. –

ответ

1

Я пробовал fnmatch, и он работает отлично, большое спасибо Charles Duffy. Это мой код:

for dp, dn, filenames in os.walk(path): 
    for ff in filenames: 
     if fnmatch.fnmatch(ff, 'My patterns here'): 
      list.append(os.path.join(dp, ff)) 
+0

вы можете использовать 'matching_files = [os.path.join (root, fn) для fn в файле fnmatch.filter (имена файлов, [hw] * ')]'. Или замените 'list.append' на' yield'. – jfs

Смежные вопросы