para largos ingles imprimir completos comics python dictionary pickle

python - largos - ¿Cómo hacer cickick dump y cargar diccionarios separados en el mismo archivo?



comics en ingles largos pdf (3)

Tengo un proceso que ejecuta y crea tres diccionarios: 2 bastante pequeños y 1 grande.

Sé que puedo almacenar un diccionario como:

import cPickle as pickle with open(filename, ''wb'') as fp: pickle.dump(self.fitResults, fp)

Lo que me gustaría hacer es almacenar los 3 diccionarios en el mismo archivo, con la capacidad de cargar los tres diccionarios por separado en otro momento. Algo como

with open(filename, ''rb'') as fp: dict1, dict2, dict3 = pickle.load(fp)

O incluso mejor, simplemente cargue los dos primeros diccionarios, y haga que sea opcional cargar el tercero (grande). ¿Es esto posible o debería hacerlo de una manera completamente diferente?


Claro, solo debes descargar cada uno por separado y luego cargarlos por separado:

with open(filename,''wb'') as fp: pickle.dump(dict1,fp) pickle.dump(dict2,fp) pickle.dump(dict3,fp) with open(filename,''rb'') as fp: d1=pickle.load(fp) d2=pickle.load(fp) d3=pickle.load(fp)

Asegúrate de volcar lo grande para que puedas cargar los pequeños sin cargar primero el grande. Me imagino que incluso podría ser inteligente y almacenar las posiciones de los archivos donde comienza cada volcado en un encabezado de clases y luego podría buscar esa ubicación antes de cargar (pero eso está empezando a ser un poco más complicado).


Como se mencionó here , puedes encurtir varios objetos en el mismo archivo y cargarlos todos (en el mismo orden):

f = file(filename, ''wb'') for obj in [dict1, dict2, dict3]: cPickle.dump(obj, f, protocol=cPickle.HIGHEST_PROTOCOL) f.close()

Entonces:

f = file(filename, ''rb'') loaded_objects = [] for i in range(3): loaded_objects.append(cPickle.load(f)) f.close()

Puede guardar sus diccionarios en un orden específico para que al cargarlos, tenga la opción de seleccionar solo los preferidos.

Por ejemplo, si almacena diccionarios en el orden: smallDict1 , smallDict2 , largeDict1
Puede cargar solo los pequeños configurando el rango apropiado al cargar
(Aquí for i in range(2) ... )


Recomiendo el módulo de shelve , que a menudo se olvida, que le proporciona un diccionario persistente respaldado por el archivo Berkley DB o el archivo dbm (según lo seleccionado por anydbm ). La base de datos debe proporcionar mejoras de rendimiento (para su gran diccionario).

Ejemplo de uso:

import shelve shelf = shelve.open(''my_shelf'') >>> shelf {} # add your dictionaries (or any pickleable objects) shelf[''dict1''] = dict(a=10, b=20, c=30, l=[10, 20, 30]) shelf[''dict2''] = dict(a=100, b=200, c=300, l=[100, 200, 300]) shelf[''dict3''] = dict(a=1000, b=2000, c=3000, l=[1000, 2000, 3000]) >>> shelf {''dict1'': {''a'': 10, ''c'': 30, ''b'': 20, ''l'': [10, 20, 30]}, ''dict3'': {''a'': 1000, ''c'': 3000, ''b'': 2000, ''l'': [1000, 2000, 3000]}, ''dict2'': {''a'': 100, ''c'': 300, ''b'': 200, ''l'': [100, 200, 300]}} shelf.close() # then, later shelf = shelve.open(''my_shelf'') >>> shelf {''dict1'': {''a'': 10, ''c'': 30, ''b'': 20, ''l'': [10, 20, 30]}, ''dict3'': {''a'': 1000, ''c'': 3000, ''b'': 2000, ''l'': [1000, 2000, 3000]}, ''dict2'': {''a'': 100, ''c'': 300, ''b'': 200, ''l'': [100, 200, 300]}}