Глава 15 · Python и файлы

Поиск файлов: iterdir() и glob()

Часто нужно не открыть конкретный файл, а сначала понять, что вообще лежит в папке.

Список содержимого папки

iterdir.py
from pathlib import Path

for item in sorted(Path("data").iterdir()):
    print(item.name, "—", "папка" if item.is_dir() else "файл")
Порядок не гарантирован
iterdir() не обещает какой-либо конкретный порядок элементов. Если порядок важен для вывода или для теста — оборачивайте в sorted(...), как в примере выше.

Поиск файлов по шаблону: glob()

glob_prosty.py
from pathlib import Path

for f in sorted(Path("data").glob("*.txt")):
    print(f.name)
Файл в data/Подходит под "*.txt"?
a.txtда
b.csvнет
c.txtда
notes.mdнет
glob() — один уровень, rglob() — рекурсивно
Path("data").glob("*.txt") ищет только в самой папке data. Чтобы искать также во всех вложенных папках, используйте Path("data").rglob("*.txt"). Не запускайте рекурсивный поиск на больших системных папках — это не игрушка для «просканировать весь диск».

Мини-проект: отчёт по папке

Соберите список содержимого учебной папки: имя, тип (файл/папка), расширение и размер (для файлов) — используя только iterdir() и атрибуты Path, без рекурсивного удаления или изменения содержимого.

otchet_po_papke.py
from pathlib import Path

def otchet(papka: Path) -> list[str]:
    stroki = []
    for item in sorted(papka.iterdir()):
        vid = "папка" if item.is_dir() else "файл"
        razmer = f", {item.stat().st_size} байт" if item.is_file() else ""
        stroki.append(f"{item.name}{vid}{razmer}")
    return stroki

for stroka in otchet(Path("data")):
    print(stroka)
★★ Самостоятельная задача
Только .json

Измените отчёт так, чтобы он показывал только файлы с расширением .json, используя glob("*.json") вместо iterdir().

Практика: iterdir(), glob() и отчёт по папке
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →