आपको बताना होगा pickle.load()कि पायथन बाइटिंग डेटा को पायथन 3 स्ट्रिंग्स में कैसे बदलना है, या आप pickleउन्हें बाइट के रूप में छोड़ने के लिए कह सकते हैं ।
डिफ़ॉल्ट ASCII के रूप में सभी स्ट्रिंग डेटा को आज़माने और डिकोड करने के लिए है, और यह डिकोडिंग विफल हो जाती है। pickle.load()प्रलेखन देखें :
वैकल्पिक कीवर्ड तर्क fix_imports , एन्कोडिंग और त्रुटियाँ हैं , जिनका उपयोग Python 2 द्वारा उत्पन्न अचार स्ट्रीम के लिए संगतता समर्थन को नियंत्रित करने के लिए किया जाता है। यदि Fix_imports सत्य है, तो Python 3 में उपयोग किए गए नए नाम के लिए अचार पुराने Python 2 नामों को मैप करने का प्रयास करेगा। एन्कोडिंग और त्रुटियां अचार को बताती हैं कि पायथन 2 द्वारा उठाए गए 8-बिट स्ट्रिंग इंस्टेंस को कैसे डीकोड किया जाए; क्रमशः 'ASCII' और 'सख्त' के लिए ये डिफ़ॉल्ट हैं। एन्कोडिंग 'बाइट' बाइट्स वस्तुओं के रूप में इन 8 बिट स्ट्रिंग उदाहरणों को पढ़ने के लिए हो सकता है।
एन्कोडिंग सेट करना latin1आपको डेटा को सीधे आयात करने की अनुमति देता है:
with open(mshelffile, 'rb') as f:
d = pickle.load(f, encoding='latin1')
लेकिन आपको यह सत्यापित करने की आवश्यकता होगी कि आपके किसी भी तार को गलत कोडेक का उपयोग करके डिकोड नहीं किया गया है; लैटिन -1 किसी भी इनपुट के लिए काम करता है क्योंकि यह बाइट मानों को 0-255 से पहले 256 यूनिकोड कोड पॉइंट पर सीधे मैप करता है।
विकल्प के साथ डेटा को लोड करना होगा encoding='bytes', और bytesबाद में सभी कुंजी और मान को डीकोड करना होगा ।
ध्यान दें कि 3.6.8, 3.7.2 और 3.8.0 से पहले पायथन संस्करणों तक, पायथन 2 datetimeऑब्जेक्ट डेटा की अनप्लिकिंग तब तक टूट जाती है जब तक आप उपयोग नहीं करते हैं encoding='bytes'।
jsonमॉड्यूल है? शायद आप एक 2.4 स्क्रिप्ट लिख सकते हैं जो ऑब्जेक्ट को unpickles करता है और इसे एक json ऑब्जेक्ट के रूप में बचाता है, और फिर एक 3.4 स्क्रिप्ट लिखता है जो json ऑब्जेक्ट पढ़ता है और इसे 3.4-संगत अचार ऑब्जेक्ट के रूप में सहेजता है। यह एक बार का ऑपरेशन होगा जो आप अपनी सभी अचार फाइलों पर चलाते हैं।