2011-06-13 12 views
13

मुझे यह त्रुटि मिल रही है, और मुझे नहीं पता कि इसका क्या अर्थ है। मैं इस समस्या को कैसे ठीक करुं?पायथन में पिकलिंग त्रुटि?

मेरे कोड इस तरह दिखता है, मैं इसे पहले का उपयोग किया है और यह काम किया है:

File "/home/md202/pmid_editor.py", line 18, in <module> 
     dict2 = pickle.load(in1) 
    File "/usr/lib/python2.5/pickle.py", line 1370, in load 
     return Unpickler(file).load() 
    File "/usr/lib/python2.5/pickle.py", line 858, in load 
     dispatch[key](self) 
KeyError: '\x00' 
+2

पूर्ण tacebacks कृपया .... क्या यह आपका स्वयं का कोड है? पुनरुत्पादन कैसे करें? –

+0

आप क्या अनपॅक कर रहे हैं? यदि यह आपके द्वारा परिभाषित कक्षा का एक उदाहरण है, तो क्या आपने कक्षा आयात की है? –

+0

मैं एक शब्दकोश को अनपिक कर रहा हूं जिसे मैंने फ़ाइल में चुना है। – marsx

उत्तर

-1

हो सकता है आप एक और प्रोटोकॉल कोशिश pickle.load(in1, 2) प्रयास करना चाहिए:

parentdir = os.getcwd() 
dirlist = os.listdir(parentdir) 

for dir in dirlist: 
    if not dir == "pubs_edits": continue 
    if os.path.isdir(os.path.join(parentdir, dir)): 
         os.chdir(os.path.join(parentdir, dir)) 
         file_list = os.listdir(os.path.join(parentdir, dir)) 
         for f in file_list: 
          in1 = open(f, 'r') 
          dict2 = pickle.load(in1) 

यह त्रुटि संदेश है!

+0

इसका क्या अर्थ है? – marsx

+0

मॉड्यूल प्रलेखन [लिंक] (http://docs.python.org/library/pickle.html#data-stream-format) पर एक नज़र डालें, लोड फ़ंक्शन एक वैकल्पिक पैरामीटर लेता है जो परिभाषित करता है कि डेटा कैसे उठाया जाता है। – Chakib

+2

दस्तावेज़ के अनुसार, लोड() कोई वैकल्पिक पैरामीटर नहीं लेता है, केवल डंप करता है। – a1an

0

मेरे लिए यह सटीक त्रुटि उत्पन्न हुई जब मैं (pickle.loads का प्रयोग करके) एक स्ट्रिंग प्रतिनिधित्व है कि मैं Django के माध्यम से एक डेटाबेस में संग्रहीत था unpickle करने की कोशिश की

pickle.loads()

13

प्रयास करें। Django ने मेरी स्ट्रिंग के गुणक प्रतिनिधित्व को बदल दिया ताकि pickle.loads(mystring) ने मुझे उस त्रुटि को फेंक दिया। जब मैंने एक स्पष्ट स्ट्रिंग रूपांतरण जोड़ा, तो यह ठीक था: pickle.loads(str(mystring))

संपादित करें: मूल पोस्ट पर टिप्पणियों को देखते हुए, मुझे लगता है कि यह यूनिकोड स्ट्रिंग समस्या से संबंधित है। मैंने डेटाबेस में एक सामान्य स्ट्रिंग डाली, और django मुझे एक यूनिकोड स्ट्रिंग देता है जो इस त्रुटि को उत्पन्न करता है।

+0

आपके उत्तर ने मेरी समस्या के साथ मेरी मदद की। मैं ऐप इंजन का उपयोग कर रहा था और मसालेदार स्ट्रिंग को db.Text() प्रॉपर्टी के रूप में संग्रहीत किया था जब मुझे डीबी.ब्लोब() –

+0

का उपयोग करना चाहिए था धन्यवाद मैट, मुझे आपके द्वारा निर्दिष्ट सटीक त्रुटि है जिसे मैंने Django का उपयोग करके डीबी में सहेजने की कोशिश की और ऑब्जेक्ट को अनपिक करते समय यह त्रुटि प्राप्त करें। – Anto

+0

संभवतः यह त्रुटि पायथन 3+ पर नहीं होगी? – Demis

3

मुझे एक ही समस्या थी, जिसके परिणामस्वरूप KeyError: '\x1f' था।

मेरे मामले में, अगर किसी gzip फ़ाइल (यानी: gzip.open(fileName,'wb')) में मसाला गया था, और मैं इसे सामान्य फ़ाइल ऑब्जेक्ट (यानी: open(fileName,'rb')) के साथ पढ़ने की कोशिश कर रहा था।

+0

ऐसा लगता है कि मसालेदार फाइलें gzip के साथ मुश्किल खेलती हैं। मेरी मसालेदार फ़ाइल एक gzip ('फ़ाइल' के अनुसार) की तरह लगती थी, लेकिन जब मैंने इसे बंद करने की कोशिश की, तो यह एक छोटा (200 एम से 10 के) अपंग फ़ाइल में लौटा, जिसमें कोई उपयोगी डेटा नहीं था (pickle.load तब एक ही कुंजी त्रुटि देता है: इस तरह की एक अनजिप फ़ाइल के साथ '\ x00' समस्या। – a1an

+0

ऐसा लगता है कि फ़ाइल अपूर्ण या दूषित है। अगर इसे टेक्स्ट प्रारूप में चुना गया था, तो आप 'zcat myfile' पर एक नज़र डाल सकते हैं - क्या यह तर्कसंगत दिखता है? – drevicko

+0

शायद यह संभवतः था दूषित, मैंने इसे पुन: उत्पन्न करने की कोशिश की और मुझे – a1an

-1

मुझे एक ही समस्या का सामना करना पड़ा जब मैं django में डेटा को स्वचालित करने की कोशिश कर रहा था। समस्या यह है कि कुछ छुपी गैर-पीकेएल फाइलें जैसे '.DS_Store' मौजूद हो सकती हैं। तो, अगर यह मामला है, तो इस समस्या लोड हो रहा है तो आप सिर्फ 'pkl' फ़ाइलें प्राप्त करने से पहले regex फ़िल्टर लगाकर संभाल कर सकते हैं: तो आप इस तरह के रूप में यह पढ़ने के लिए

import re 

for dir in dirlist: 
    if not dir == "pubs_edits": continue 
    if os.path.isdir(os.path.join(parentdir, dir)): 
     os.chdir(os.path.join(parentdir, dir)) 
     file_list = os.listdir(os.path.join(parentdir, dir)) 
     reg = re.compile(r'pkl') 
     for f in file_list: 
      if reg.search(f): 
       in1 = open(f, 'r') 
       dict2 = pickle.load(in1) 
0

अचार द्विआधारी है। इसके बजाय ('आर') बाइनरी पढ़ने ('आरबी') का उपयोग करने का प्रयास करें। साथ ही, यदि आपकी लेखन फ़ाइल यह सुनिश्चित करती है कि आप अचार फ़ाइल को द्विआधारी के रूप में अच्छी तरह से लिख रहे हैं ('wb')। यह काम करना चाहिए, उम्मीद है कि यह मदद करता है।

+0

लोड होने पर और कोई त्रुटि नहीं मिली, डुनो क्यों आप नीचे आ गए हैं, यही वह जवाब है जिसे मैं ढूंढ रहा था। बनाने के लिए एक आसान गलती! – user2677280

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