Сначала немного фона. Я анализирую простой формат файла и хочу повторно использовать результаты в коде Python позже, поэтому я создал очень простую иерархию классов и написал анализатор для построения объектов из исходных записей в текстовых файлах, из которых я работаю .
В то же время я хотел бы загрузить данные в устаревшую базу данных, файлы загрузчика для которой имеют простой формат с разделением табуляцией. Самый простой способ - сделать что-то вроде:
print "{0}\t{1}\t....".format(record.id, record.attr1, len(record.attr1), ...)
Поскольку существует так много столбцов для печати, я подумал, что я буду использовать класс Template
, чтобы немного легче было видеть, что к чему, т.е.
templ = Template("$id\t$attr1\t$attr1_len\t...")
И я подумал, что мог бы использовать запись вместо карты, используемой при вызове substitute
, с некоторыми дополнительными ключевыми словами для производных значений:
print templ.substitute(record, attr1_len=len(record.attr1), ...)
К сожалению, это не удается, жалуясь, что экземпляр записи не имеет атрибута __getitem__
.
Итак, мой вопрос состоит из двух частей:
- мне нужно реализовать
__getitem__
и если да, то как?
- есть ли более элегантный способ для чего-то подобного, когда вам просто нужно вывести набор атрибутов, имя которых вы уже знаете?