2011-09-04 3 views
1

У меня есть класс python, который содержит много объектов - некоторые из них представляют собой структуры данных (lists, dicts и т. Д.), А некоторые - обработчики других классов (которые также содержат другие структуры данных ...).Python - Сохранить объекты вместе в двоичном файле?

Вместо того чтобы использовать pickle, чтобы сохранить весь класс & его содержание, мне было интересно, если есть способ serialize данные нескольких желаемых объектов и сохранить их (только) в двоичный файл?

Например, предположим, что у меня есть следующие объекты 2 питона:

myList = [1, 2, 3, 4, 5] 
myDict = {'a' : 14, 'b' : 5, 'c' : 65} 

Что такое лучший способ сохранить содержимое ОБА этих python объектов в двоичный файл? В идеале я хотел бы сохранить оба объекта в том же двоичном файле и иметь возможность загружать данные позже.

+0

Вы можете попытаться создать что-то, используя модуль [struct] (http://docs.python.org/library/struct.html), но он не поддерживает списки сохранения или dicts, насколько я знаю. – Julian

+0

Если они действительно такие же простые, как списки или dicts, рассмотрим json, как описано в [Как я могу читать несколько объектов JSON из файла/потока в Python?] (Http://stackoverflow.com/questions/6886283/как-я-могу-я-чтения нескольких JSON-объекты, из-а-файл-поток-в-питон). – agf

+0

agf - спасибо, я посмотрю ... – user3262424

ответ

5

Затем создайте для них класс контейнера (или названный кортеж, или только кортеж, что угодно) и рассорим его (или измените исходный класс, чтобы только те части, которые вы хотите, мариновали). pickle- это сериализация, и это стандартный механизм Python для этого. Поэтому, если вам не нужно, например, больше совместимости между разными языками, придерживайтесь его.

+0

Спасибо. «экономят» данные экономичным способом? (Я ожидаю иметь дело с большими объектами) – user3262424

+0

@ user3262424: Использовать протокол 2, это в настоящее время самый компактный/эффективный формат. –

+0

В Python 3 есть протокол 3, который еще эффективнее. В общем, передача '-1' в качестве аргумента протокола всегда будет использовать самый последний протокол (но не может быть обратно совместим). –

Смежные вопросы