Глава 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, без установки