Поиск по шаблонам и итерация
Находите файлы по шаблонам 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 — локальная установка не требуется.
Все уроки этого курса
- Объект Path
- Чтение и запись файлов
- Поиск по шаблонам и итерация
- Манипуляции с путями