0Pricing
Python Academy · Урок

Поиск по шаблонам и итерация

Находите файлы по шаблонам glob

«Поиск по шаблонам и итерация» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Поиск файлов

pathlib позволяет легко просматривать содержимое каталогов и искать файлы, соответствующие шаблону. Основные методы — iterdir, glob и rglob.

Подготовка примера дерева каталогов

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

from pathlib import Path

root = Path('sample')
root.mkdir(exist_ok=True)
(root / 'a.txt').write_text('1')
(root / 'b.txt').write_text('2')
(root / 'c.log').write_text('3')
print('created files')

iterdir выводит содержимое

iterdir() возвращает каждый элемент, находящийся непосредственно внутри каталога, по одному объекту Path на элемент.

from pathlib import Path

root = Path('sample')
for entry in sorted(root.iterdir()):
    print(entry.name)

glob с шаблоном

glob() находит элементы, соответствующие шаблону в стиле оболочки. Подстановочный символ * соответствует любой последовательности символов.

from pathlib import Path

root = Path('sample')
for txt in sorted(root.glob('*.txt')):
    print(txt.name)

Подстановочный символ для одного символа

Подстановочный символ ? соответствует ровно одному символу и полезен для имён фиксированной длины.

from pathlib import Path

root = Path('sample')
for m in sorted(root.glob('?.txt')):
    print(m.name)

Диапазоны символов

Квадратные скобки соответствуют любому одному символу из набора или диапазона, так же как при использовании шаблонов оболочки.

from pathlib import Path

root = Path('sample')
for m in sorted(root.glob('[ab].txt')):
    print(m.name)

Рекурсивный glob с rglob

rglob() выполняет поиск в каталоге и во всех его подкаталогах. Этот метод эквивалентен glob('**/pattern').

from pathlib import Path

root = Path('sample')
(root / 'nested').mkdir(exist_ok=True)
(root / 'nested' / 'deep.txt').write_text('x')
for m in sorted(root.rglob('*.txt')):
    print(m)

Подсчёт совпадений

Результаты glob являются итераторами. Оберните итератор в list(), чтобы подсчитать совпадения или использовать их повторно.

from pathlib import Path

root = Path('sample')
txts = list(root.rglob('*.txt'))
print('found', len(txts), 'text files')

Фильтрация во время перебора

Объединяйте поиск по шаблону с проверками is_file или is_dir, чтобы точно фильтровать результаты.

from pathlib import Path

root = Path('sample')
files = [p for p in root.iterdir() if p.is_file()]
for f in sorted(files):
    print(f.name)

Обработка найденных файлов

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

from pathlib import Path

root = Path('sample')
total = 0
for p in root.rglob('*.txt'):
    text = p.read_text().strip()
    if text.isdigit():
        total += int(text)
print('total:', total)

Сортировка результатов glob

glob не гарантирует определённый порядок. Если Вам нужен воспроизводимый результат, например при создании отчёта, оберните результаты в sorted().

from pathlib import Path

root = Path('sample')
for p in sorted(root.glob('*'), key=lambda x: x.name):
    print(p.name)

Быстрая проверка

Чем отличаются glob и rglob?

Итоги

Вы научились находить файлы с помощью шаблонов glob.

  • iterdir выводит непосредственное содержимое каталога.
  • glob ищет совпадения по шаблону (*, ?, [...]).
  • rglob выполняет рекурсивный поиск.
  • Объединяйте поиск по шаблону с фильтрами is_file/is_dir, а затем читайте найденные файлы.

Часто задаваемые вопросы

Урок «Поиск по шаблонам и итерация» бесплатный?

Да — полный текст урока «Поиск по шаблонам и итерация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Поиск по шаблонам и итерация»?

Находите файлы по шаблонам glob Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Поиск по шаблонам и итерация»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Объект Path
  2. Чтение и запись файлов
  3. Поиск по шаблонам и итерация
  4. Манипуляции с путями
← Назад к Python Academy