Как мне найти в папке имя файла, которое соответствует регулярному выражению с использованием Python? - PullRequest
3 голосов
/ 24 ноября 2008

У меня возникли некоторые трудности при написании функции, которая будет искать в каталоге файл, соответствующий определенному регулярному выражению (которое я скомпилировал с помощью re.compile). Итак, мой вопрос: как мне найти в каталоге (я планирую использовать os.walk) файл, который соответствует определенному регулярному выражению? Пример был бы очень признателен. Заранее спасибо.

Ответы [ 4 ]

10 голосов
/ 24 ноября 2008

Здесь будут найдены все файлы, начиная с двух цифр и заканчивая GIF. Вы можете добавить файлы в глобальный список, если хотите:

import re
import os
r = re.compile(r'\d{2}.+gif$')
for root, dirs, files in os.walk('/home/vinko'):
  l = [os.path.join(root,x) for x in files if r.match(x)]
  if l: print l #Or append to a global list, whatever
2 голосов
/ 24 ноября 2008
  1. Читайте о методе *1003* RE .

  2. Прочитать все ответы на Как скопировать файлы с определенным расширением в папку в моем скрипте python (версия 2.5) ?

  3. Выберите тот, который использует fnmatch. Заменить fnmatch на re.match. Это требует тщательного обдумывания. Это не вырезать и вставить.

  4. Затем задайте конкретные вопросы.

1 голос
/ 25 ноября 2008

Один из основателей Stackoverflow - большой поклонник RegexBuddy от JGSoft. Я попробовал это по своей прихоти, когда писал на работе простой сценарий перемещения файлов, и это облегчает генерацию лучшего регулярного выражения для работы на выбранном вами языке. Если у вас возникли проблемы с разработкой самого регулярного выражения, это хороший инструмент для проверки вашей логики. Думаю, я тоже большой поклонник.

1 голос
/ 24 ноября 2008

Если шаблон, который вы должны сопоставить, достаточно прост для захвата с подстановочными знаками файловой системы, я рекомендую вам взглянуть на модуль glob, который существует именно для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...