Задача поставлена верно. Это важный критерий, потому что бывает неправильная постановка задачи в виде тумана или желе. Бывают ещё пластилиновые задачи - это когда она сейчас одна, через час становится другая вообще, а ещё через час - вообще третья. То есть это всё, что нужно устранять в задаче, прежде чем начинать её решать.
Fixx_Jr
Думаю, что надо разбить на кусочки(абзацы), а из них уже выжимать то, что есть в листы.
Вообще, такой класс задач гарантированно решается через конечные автоматы. У них там много всяких разновидностей. Так что если не можешь что-то сделать, то надо подтягивать теорию по ДКА (детерминированный конечный автомат). Если изучишь, будешь все такие задачи как орешки щёлкать.
Fixx_Jr
Но не могу сообразить, как эти абзацы достать
Надо обнаружить максимальные структуры, из которых состоят данные, и сделать код для их разделения. Затем надо одну такую структуру тоже делить и тоже на максимальные структуры, из которых она состоит, получив второй кусок кода. Так ты продолжаешь спускаться с максимального уровня структур до минимального уровня структур, пока не получишь самые простые элементы.
Да, тебе нужно все эти данные сначала разделить на записи. Получив список этих записей, нужно разделить саму запись на поля. Получив для каждой записи список её полей, нужно разделить само поле на имя и значение поля.
Так у тебя получится список списков списков - список записей в виде списков полей в виде списков имя значение. Можешь делать словарь, но словарь не упорядочен. В данной задаче порядок полей относительно друг друга в записи не важен, но в каких-то задачах этот порядок может иметь значение.
Можно это выдернуть всё и регулярными выражениями, даже одной штукой, но приучаться вообще решать такие задачи нужно именно классическим способом. Потому что сейчас оно сработает, а потом будет другая ситуация, где регулярное выражение не составишь. Также сейчас ты работаешь с текстом, а потом тебе надо будет работать точно так же, но только со списком событий. То есть декомпозиция задачи и конечный автомат может работать не только с текстом, а вообще с любой последовательностью - последовательностью символов, чисел, объектов, событий.
Так что начни с того, что разложи эти целые данные на отдельные записи, и код у тебя должен быть в итоге в виде функции, которая принимает целые данные, а возвращает список записей. Затем ты напишешь функцию, которая принимает одну запись и возвращает список её полей. Затем ты напишешь функцию, которая принимает одно поле и возвращает список имя поля и значение поля. И потом уже ты напишешь функцию, которая соединяет все эти три функции вместе и таким макаром получает из целых данных полностью разделённую структуру. И потом из неё ты уже можешь выбирать нужные тебе поля для сохранения в csv-файле.
tags: decomposition