Цель практикума
Практикум 15 объединяет несколько тем, которые уже проходили отдельно: обработку текста регулярными выражениями, чтение и запись файлов, парсинг JSON и дат. Решение каждой задачи строится из маленьких шагов: открыть источник, извлечь нужные данные, преобразовать их и сохранить результат.
Регулярные выражения в задачах
Во всех текстовых задачах используется модуль re. Главные приёмы:
re.findall(pattern, text)— возвращает список всех совпадений.re.sub(r"\D", "", text)— удаляет из строки всё, кроме цифр.\b— граница слова, помогает отсечь лишние символы.(?:...)— негруппирующая группа, не создаёт отдельных элементов в результате.
import re
# Найдём все слова из букв и цифр
text = "Order #123, code: ABC-42"
print(re.findall(r"\b\w+\b", text))
Работа с JSON
JSON — универсальный формат обмена данными. В Python за него отвечает модуль json:
json.load(file)— читает JSON из открытого файла и возвращает объект Python.json.dump(obj, file, indent=4)— записывает объект в файл с отступами.json.loads(string)/json.dumps(obj)— те же операции со строкой.
import json
from pathlib import Path
grades = [
{"name": "Alice", "subject": "Math", "grade": 90, "date": "12-03-2025"},
]
Path("grades.json").write_text(
json.dumps(grades, indent=2, ensure_ascii=False),
encoding="utf-8",
)
Парсинг дат
Даты в задачах приходят в виде строки "06-09-2025" (день-месяц-год). Чтобы получить месяц, используем datetime.strptime:
from datetime import datetime
date_obj = datetime.strptime("06-09-2025", "%d-%m-%Y")
print(date_obj.month) # 9
print(date_obj.year) # 2025
Генераторы
Генераторы позволяют обрабатывать большие файлы по частям. Вместо того чтобы читать весь файл в память, можно читать строку за строкой:
from pathlib import Path
def read_lines(path: Path):
with path.open(encoding="utf-8") as file:
for line in file:
yield line.rstrip("\n")
for line in read_lines(Path("big_file.txt")):
print(line)
Современный доступ к файлам
Вместо строковых путей и функций os.path современный Python рекомендует pathlib.Path:
from pathlib import Path
report_path = Path("data") / "quarterly_report.json"
text = report_path.read_text(encoding="utf-8")