Форум сайта python.su
Здравствуйте, есть класс имеющий переменные, списки и строки произвольной длины. Как лучше\проще\красивее реализовать запись членов(не всех) объкта такого класса в файл с возможностью дозаписи в конец этого файла. При чтение нужно получить список из объектов класса. Количество объектов большое, объем наверно будет в диапазоне десятков ГБ, то есть важно указать размер переменных. В pickle ни указание размера ни дозапись ни кастомизацию членов у меня реализовать не получается, да и не подходит он наверное для файлов таких размеров. Знаю как сделать через struct, но там выйдет в много строк.
Офлайн
sergeekИ все это в один файл?
объем наверно будет в диапазоне десятков ГБ
Офлайн
import sqlite3, os def serializable(cls): class Wrapper(object): SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) DB_PATH = os.path.join(SITE_ROOT, 'db.sqlite') def serialize(self): conn = sqlite3.connect(self.DB_PATH) cursor = conn.cursor() for attr in self.instance.TOBD: cursor.execute('INSERT INTO store VALUES (?,?,?)', [attr, str(getattr(self.instance,attr)), str(self.wrapped)]) conn.commit() cursor.close() def __init__(self): if not hasattr(cls, 'TOBD'): cls.TOBD=[] setattr(cls, 'serialize', self.serialize) self.wrapped=cls def __call__(self, *args, **kw): self.instance=self.wrapped(*args, **kw) return self.instance return Wrapper() @serializable class Foo(): TOBD=['a','b'] def __init__(self): self.a=5 self.b=[1,2,3] f=Foo() f.serialize() b=Foo() b.a="sdfsdf" b.serialize()
Офлайн
FishHookОколо 10-20 файлов, их имена присутствуют в этом же классе. БД при беглом обзоре показались для задач гораздо сложнее моей, поэтому я еще не начинал изучать ихsergeekИ все это в один файл?
объем наверно будет в диапазоне десятков ГБ
А почему не в БД?
FishHook
Отредактировано sergeek (Июнь 26, 2012 20:32:41)
Офлайн