| Поиск файлов и каталогов по шаблону |
|
До сих пор мы рассматривали способы обработки каталогов и файлов и такие действия, как поиск дубликатов, удаление каталогов, перемещение каталогов и так далее. Следующий шаг в освоении дерева каталогов состоит в применении поиска по шаблону либо как самостоятельной операции, либо в комбинации с предыдущими приемами. Как и все прочее в языке Python, реализация поиска по шаблону расширения или имени файла выполняется очень просто. В этом разделе мы продемонстрируем несколько общих проблем, связанных с поиском по шаблону, и применим приемы, использовавшиеся ранее, для создания простых, но мощных инструментов. Очень часто системным администраторам приходится сталкиваться с необходимостью отыскать и удалить, переместить, переименовать или скопировать файлы определенных типов. Самый простой подход к решению этой задачи в языке Python заключается в использовании модуля fnmatch или glob. Основное отличие между этими двумя модулями заключается в том, что функция fnmatch() при сопоставлении имени файла с шаблоном UNIX возвращает значение True или False, а функция glob() возвращает список путей к файлам, имена которых соответствуют шаблону. Для создания более сложных инструментов поиска по шаблону можно использовать регулярные выражения. В примере 6.11 показано, как используются функции fnmatch() и glob(). Здесь мы снова повторно использовали программный код, созданный нами ранее, импортировав класс dlskwalk из модуля dlskwalk_api. Пример 6.11. Использование функций fnmatchf ) uglob() в интерактивном режиме для поиска файлов
В этом примере, после того как мы воспользовались нашим модулем dlskwalk_api, у нас появился список полных путей к файлам, находящимся в каталоге /imp. После этого мы использовали функцию fnmatch(), чтобы определить соответствие каждого файла шаблону "*.txt". Функция glob() отличается тем, что она сразу выполняет сопоставление с шаблоном и возвращает список имен файлов. Функция glob() является более высокоуровневой по отношению к функции f nmatch(), но обе они являются незаменимыми инструментами при решении немного разных задач. Функцию f nmatch() особенно удобно использовать в комбинации с программным кодом, создающим фильтр для поиска данных в дереве каталогов. Часто при работе с каталогами бывает необходимо работать с файлами, имена которых соответствуют определенным шаблонам. Чтобы увидеть этот прием в действии, мы попробуем решить классическую задачу системного администрирования по переименованию всех файлов в дереве каталогов, имена которых соответствуют заданному шаблону. Имейте в виду, что переименовывать файлы так же просто, как удалять, сжимать или обрабатывать их. Для решения подобных задач используется простой алгоритм: 1.Получить путь к файлу в каталоге. 2.
Выполнить дополнительную фильтрацию - в эту операцию может 3.
Выполнить действие над файлом - скопировать, удалить,
сжать, Пример 6.12. Переименование файлов с расширением .трЗ в файлы с расширением .txt
При использовании программного кода, разработанного ранее, переименование всех файлов с расширением .трЗ в каталоге уложилось в четыре строки легко читаемого программного кода на языке Python. Если вы один из немногих системных администраторов, кто не прочитал ни одного эпизода из «BOFH» («Bastard Operator From Hell»), то вам не сразу станет очевидно, что можно было бы дальше сделать с этим фрагментом кода. Представьте, что у вас имеется технологический файловый сервер, который используется исключительно как высокопроизводительное хранилище файлов с далеко не безграничной емкостью. Вы стали замечать, что диски сервера стали часто переполняться, потому что парочка недобросовестных пользователей принялись размещать на них сотни гигабайтов файлов МРЗ. Конечно, вы могли бы ввести квотирование дискового пространства для пользователей, но нередко квотирование порождает больше проблем, чем решает. Одно из решений состоит в том, чтобы написать сценарий для запуска его из планировщика cron каждую ночь, который будет отыскивать файлы МРЗ и выполнять над ними «случайные» операции. По понедельникам он мог бы давать этим файлам расширение .txt, по вторникам - сжимать их в ZIP-архивы, по средам - перемещать в каталог /tmp, по четвергам -удалять их и отсылать владельцу полный список удаленных файлов МРЗ по электронной почте. Мы не можем советовать вам сделать это, если, конечно, вы не являетесь владельцем компании, на которую работаете, но для настоящего «чертова ублюдка оператора» этот пример можно считать воплощением мечты.
Related Articles
Set as favorite
Bookmark
Email This
Hits: 517 Комментарии (0)RSS feed CommentsНаписать комментарий |