2012-07-25 13 views
15

मेरे पास एक प्रक्रिया है जो तीन शब्दकोश चलाती है और बनाता है: 2 बल्कि छोटी, और 1 बड़ी।कैसे डंप करें और अलग-अलग शब्दकोशों को एक ही फ़ाइल में लोड करें?

मैं जानता हूँ कि मैं एक शब्दकोश स्टोर कर सकते हैं की तरह: किसी दूसरे समय में अलग-अलग तीन शब्दकोशों में लोड करने की क्षमता के साथ

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

मैं क्या करना चाहते हैं क्या दुकान एक ही फाइल में सभी 3 शब्दकोशों है, ।

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

या इससे पहले बेहतर पहले दो शब्दकोशों को लोड करें और इसे वैकल्पिक बनाएं कि तीसरे (बड़े) को लोड करना है या नहीं। क्या यह संभव है या मुझे इसके बारे में पूरी तरह से अलग तरीके से जाना चाहिए?

+0

कहाँ cPickle downlaod था, मैं इसके लिए खोज रहा हूँ .. इसे नहीं मिला। – Tekkzz

उत्तर

21

ज़रूर, तुम सिर्फ अलग से हर एक को डंप और फिर उन्हें अलग से लोड:

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) 

पिछले पर बड़ा डंप करने के लिए ताकि आप पहली बड़ी एक लोड किए बिना छोटों लोड कर सकते हैं सुनिश्चित करें। मुझे कल्पना है कि आप चालाक भी प्राप्त कर सकते हैं और फ़ाइल की स्थिति को स्टोर कर सकते हैं जहां प्रत्येक डंप प्रकार के शीर्षलेख में शुरू होता है और फिर आप लोड करने से पहले उस स्थान की तलाश कर सकते हैं (लेकिन यह थोड़ा और जटिल हो रहा है)।

4

मैं भूल गया shelve मॉड्यूल भूल गया जो प्रभावी रूप से आपको बर्कले डीबी फ़ाइल या डीबीएम फ़ाइल द्वारा समर्थित एक सतत शब्दकोश प्रदान करता है (जैसा कि anydbm द्वारा चुना गया है)। डीबी प्रदर्शन सुधार प्रदान करना चाहिए (आपके बड़े शब्दकोश के लिए)।

उदाहरण उपयोग:

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

जैसा कि बताया जा here, आप एक ही फाइल में कई वस्तुओं अचार कर सकते हैं और उन सब को लोड (एक ही क्रम में):

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() 

आप अपने शब्दकोश को एक विशिष्ट क्रम में सहेज सकते हैं ताकि उन्हें लोड करते समय, आप ई केवल पसंदीदा वाले लोगों का चयन करने का विकल्प।

उदाहरण के लिए, यदि आप क्रम में शब्दकोशों की दुकान: smallDict1, smallDict2, largeDict1
आप केवल छोटे लोगों को उचित सीमा निर्धारित कर, जबकि
लोड हो रहा है (यहां for i in range(2) ...) लोड कर सकते हैं

संबंधित मुद्दे