Alterna · учебный материал

Текст, данные и виртуальные файлы

re, fnmatch, csv, json и виртуальные файлы в Python: разбирать данные по формату, а не по догадке.

Что в этом материале

Содержание и основные понятия

Выбирай инструмент по грамматике данных: строковые методы для простого формата,
re
для шаблона,
csv
для таблицы,
json
для структуры.
текст и файлы
10-11 класс
ЕГЭ: обработка файлов
01
Регулярные выражения и шаблоны имен
re.findall(pattern, text)
Находит все непересекающиеся совпадения.
Используй raw-строки:
r'\d+'
.
re.fullmatch(pattern, text)
Проверяет, что шаблон покрывает всю строку.
Надежнее, чем поиск части строки для валидации.
fnmatch.fnmatch(name, '*.csv')
Сопоставляет имя файла с простым glob-шаблоном.
Это не регулярное выражение и не читает каталог.
re не всегда нужен
Для разделения по пробелу или запятой чаще понятнее
split
.
Сложный шаблон не улучшает простой формат.
import
re
text = "id=12; id=7"
print(re.findall(r"id=(\d+)", text))
Группа в скобках возвращает только числа после
id=
. Без группы результатом были бы целые совпавшие фрагменты.
02
CSV и JSON: формат задает парсер
Формат
Что хранит
Инструмент
Обычный текст
Строки, числа, слова в условленном порядке.
open(...)
, цикл по файлу,
split
.
CSV
Табличные строки с разделителем и, возможно, кавычками.
csv.reader
или
csv.DictReader
.
JSON
Вложенные списки, словари, числа, строки и булевы значения.
json.load
, не
eval
.
Безопасность
Не разбирай внешний JSON через
eval
.
json.load
читает только данные нужного формата, а
eval
может выполнить строку как код.
03
Виртуальный файл в тренажере
В этой главе поле виртуального
input.txt
ведет себя как файл с заданным именем. Код может открыть его обычной конструкцией
open('input.txt', encoding='utf-8')
. Это учебная имитация: программа изолирована в Worker и не получает доступа к файлам компьютера.
import
json
with open("input.json", encoding="utf-8") as source:
data = json.load(source)
print(data["name"])
json.load
получает поток файла и возвращает структуру Python. Перед чтением программа должна знать точное имя виртуального файла.
04
Быстрая проверка
Какой модуль правильно прочитает таблицу CSV, в ячейках которой могут быть запятые и кавычки?

Структурная карта учебников