2014-09-15 9 views
45

मैं पाइथन 3 पर एक फ़ाइल डंप करने के लिए अचार का उपयोग करता हूं, और मैं अजगर का उपयोग पाइथन 2 पर फ़ाइल लोड करने के लिए करता हूं, ValueError प्रकट होता है।ValueError: असमर्थित अचार प्रोटोकॉल: 3, python2 अचार पाइथन 3 अचार द्वारा डाली गई फ़ाइल लोड नहीं कर सकता है?

तो, अजगर 2 अचार पाइथन 3 अचार द्वारा डाली गई फ़ाइल को लोड नहीं कर सकता है?

अगर मुझे यह चाहिए? कैसे करें?

+1

यदि आप पहले से लिखित मसालेदार फ़ाइलों के साथ फंस गए हैं, तो जांचें: http://stackoverflow.com/questions/34571063/i-have-pickled-files-using-protocol-3-in-python3-and- अब-ए-आवश्यकता के unpickle-/ 34571081 # 34571081 – rysqui

उत्तर

74

आप अजगर 3. में एक कम प्रोटोकॉल संख्या अजगर 3 नंबर 3 साथ एक नए प्रोटोकॉल पेश किया है (और डिफ़ॉल्ट के रूप में उपयोग करता है) के साथ मसालेदार डेटा लिखने चाहिए, ताकि जो द्वारा पढ़ा जा सकता 2 के एक मूल्य के लिए वापस स्विच पायथन 2.

pickle.dump में पैरामीटर देखें। आपका परिणाम कोड इस तरह दिखेगा।

pickle.dump(your_object, your_file, protocol=2) 

में pickle.load क्योंकि pickle फ़ाइल से प्रोटोकॉल निर्धारित कर सकते हैं कोई पैरामीटर नहीं है।

30

अचार आपके डेटा को बाइनरी स्ट्रीम में बदलने के लिए अलग-अलग protocols का उपयोग करता है।

  • अजगर 2 में देखते हैं 3 different protocols (0, 1, 2) और डिफ़ॉल्ट 0 है।

  • अजगर 3 में देखते हैं 5 different protocols (0, 1, 2, 3, 4) और डिफ़ॉल्ट 3 है।

आप क्रम में अजगर 3 एक प्रोटोकॉल 3 से कम में निर्दिष्ट अजगर 2 में डेटा लोड करने के लिए जब pickle.dump लागू आप पैरामीटर निर्दिष्ट कर सकते हैं सक्षम होने के लिए आवश्यक है।

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