Как сохранить и восстановить несколько переменных в python?

Мне нужно сохранить около дюжины объектов в файл, а затем восстановить их позже. Я попытался использовать цикл for с рассолом и полкой, но это не сработало правильно.

Редактировать.
Все объекты, которые я пытался сохранить, были в одном классе (я должен был упомянуть об этом раньше), и я не понимал, что могу просто сохранить весь класс следующим образом:

def saveLoad(opt): global calc if opt == "save": f = file(filename, 'wb') pickle.dump(calc, f, 2) f.close print 'data saved' elif opt == "load": f = file(filename, 'rb') calc = pickle.load(f) else: print 'Invalid saveLoad option' 

Если вам нужно сохранить несколько объектов, вы можете просто поместить их в один список или кортеж, например:

 import pickle # obj0, obj1, obj2 are created here... # Saving the objects: with open('objs.pickle', 'w') as f: # Python 3: open(..., 'wb') pickle.dump([obj0, obj1, obj2], f) # Getting back the objects: with open('objs.pickle') as f: # Python 3: open(..., 'rb') obj0, obj1, obj2 = pickle.load(f) 

Если у вас много данных, вы можете уменьшить размер файла, передав protocol=-1 в dump() ; pickle будет использовать наилучший доступный протокол вместо стандартного (и более обратного) протокола по умолчанию. В этом случае файл должен быть открыт в двоичном режиме (соответственно wb и rb ).

Бинарный режим также должен использоваться с Python 3, поскольку его протокол по умолчанию создает двоичные (т.е. нетекстовые) данные (режим записи 'wb' и режим чтения 'rb' ).

Существует встроенная библиотека под названием pickle . Используя pickle вы можете сбрасывать объекты в файл и загружать их позже.

 import pickle f = open('store.pckl', 'wb') pickle.dump(obj, f) f.close() f = open('store.pckl', 'rb') obj = pickle.load(f) f.close() 

Вы должны смотреть на полки и рассолывать модули. Если вам нужно хранить много данных, лучше использовать базу данных

Вы можете использовать klepto , который обеспечивает постоянное кэширование в память, диск или базу данных.

 [email protected]>$ python Python 2.7.6 (default, Nov 12 2013, 13:26:39) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from klepto.archives import file_archive >>> db = file_archive('foo.txt') >>> db['1'] = 1 >>> db['max'] = max >>> squared = lambda x: x**2 >>> db['squared'] = squared >>> def add(x,y): ... return x+y ... >>> db['add'] = add >>> class Foo(object): ... y = 1 ... def bar(self, x): ... return self.y + x ... >>> db['Foo'] = Foo >>> f = Foo() >>> db['f'] = f >>> db.dump() >>> 

Затем, после перезапуска интерпретатора …

 [email protected]>$ python Python 2.7.6 (default, Nov 12 2013, 13:26:39) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from klepto.archives import file_archive >>> db = file_archive('foo.txt') >>> db file_archive('foo.txt', {}, cached=True) >>> db.load() >>> db file_archive('foo.txt', {'1': 1, 'add': <function add at 0x10610a0c8>, 'f': <__main__.Foo object at 0x10510ced0>, 'max': <built-in function max>, 'Foo': <class '__main__.Foo'>, 'squared': <function <lambda> at 0x10610a1b8>}, cached=True) >>> db['add'](2,3) 5 >>> db['squared'](3) 9 >>> db['f'].bar(4) 5 >>> 

Получить код здесь: https://github.com/uqfoundation