2012-07-25 15 views
15

Üç sözlük çalıştıran ve oluşturan bir işlem var: 2 oldukça küçük ve 1 büyük. Ben yapmak istiyorum neNasıl tıklatılır ve aynı dosyaya ayrı sözlükler yüklenir?

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

mağaza aynı dosyadaki tüm 3 sözlükleri olan başka bir zamanda ayrı ayrı üç sözlüklerde yüklemek için yeteneği ile,:

ben gibi bir sözlüğü saklayabilir biliyorum .

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

Hatta daha da iyisi nötrino ilk iki sözlükleri yüklemek ve isteğe bağlı üçüncü (büyük) bir yük olmadığını olun. Bu mümkün mü yoksa tamamen farklı bir şekilde mi gitmeliyim?

+0

, Onu arıyordum. – Tekkzz

cevap

21

Tabii, sadece her birini ayrı ayrı dökümü ve ayrı olarak yüklenmesi:

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) 

ilk büyük olanı yüklemeden küçük olanlar yükleyebilirsiniz böylece son on büyük dökümü emin olun. Hayal bile edemedim ve her bir döküntünün bir başlığın içinde başladığı dosya konumlarını saklayabileceğinizi ve daha sonra yüklemeden önce bu konumu arayabileceğinizi (ama bu biraz daha karmaşıklaşmaya başlıyor) hayal edebiliyorum.

4

Etkin bir şekilde, Berkley DB dosyası veya dbm dosyası tarafından desteklenen kalıcı bir sözlüğü (anydbm tarafından seçildiği gibi) sağlayan unutulmuş shelve modülünü öneririm. Db, performans iyileştirmeleri sağlamalıdır (büyük sözlüğünüz için).

Örnek kullanım:

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]}} 
3

olarak aynı dosya içine birkaç nesne turşu ve (aynı sırayla) hepsini yükleyebilirsiniz, here söz: Sonra

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

:

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

Sözlüklerinizi, yüklerken belirli bir sırada kaydedebilirsiniz. e sadece tercih edilenleri seçme seçeneği. sırayla sözlükleri saklıyorsanız

eg için: smallDict1, smallDict2, (Burada for i in range(2) ...)
yüklenirken largeDict1
Uygun aralık ayarlayarak sadece küçük olanları yükleyebilirsiniz

Eğer cPickle downlaod vermedi
İlgili konular