July 2nd, 2019

Matrix

Ода во славу стандартизации форматов

Мой банк давно поддерживает экспорт списка операций текущего счета в формат Excel. Внутри это не совсем Excel, а гибрид HTML и XMLNS (типа, для простоты текстовой генерации). Я примерно раз в месяц скачиваю такой файлик для контроля движений на счету. И вот этих табличек накопилось целые кучи, аж с 2008 года. Поставил я перед собой цель: избавиться от неудобных файликов и слить всё в одну базу данных. Цель - не рыскать в поисках той или иной транзакции, объединить естественным образом пересекающиеся по времени отрезки и получить сплошную картину по годам.

И вот тут встала проблема совместимости форматов. Дело в том, что с 2008 года банк успел трижды поменять внутренний формат этих самых файлов. С точки зрения Excel совместимость сохранилась, но вот формально распарсить содержимое с первой попытки не удалось. В качестве парсера использовался Пайтон-модуль со странным названием "BeautifulSoup". Как оказалось, его смутил несовместимый трюк с тэгами, когда <img ...> представляется в виде <!img ...>. В результате всё дерево тэгов "поплыло" и содержимое оказалось недоступным. Пришлось применить к текстовому буферу глобальную замену тэга с восклицательным знаком на его же, но без богопротивной закорючки. После этого (немного поигравшись с атрибутами и фильтрацией пустых строк) удалось на 100% распознать все три вариации форматов. Это чудо: без танцев с бубнами, путём установки стандартного модуля, удалось прочитать данные более чем 10-летней давности!

Ясное дело, что будь таблички в каком-нибудь CSV, таких глупостев вообще удалось бы избежать, но в любом случае, победа стандартов очевидна. Теперь осталось придумать, во что эти данные конвертировать. Пока вырисовывается очевидное решение - SQLite3. Тем более, что абстрактный класс по ведению баз с произвольной схемой я уже накатал (для каталогизатора домашних коллекций).

Так что продолжение следует...