2015-04-12 8 views
9

मैं एक अचार फ़ाइल में,लोड अचार फ़ाइल (python3 से आता है) को Python2

>>> with open("wikilinks.pickle", "rb") as f: 
...  titles, links = pickle.load(f) 
... 
>>> len(titles) 
13421 

साथ मैं python3 में लोड कर सकते हैं। Traceback (सबसे हाल कॉल पिछले):

File "<stdin>", line 2, in <module> 
    File "/usr/lib/python2.7/pickle.py", line 1378, in load 
    return Unpickler(file).load() 
    File "/usr/lib/python2.7/pickle.py", line 858, in load 
    dispatch[key](self) 
    File "/usr/lib/python2.7/pickle.py", line 886, in load_proto 
    raise ValueError, "unsupported pickle protocol: %d" % proto 
ValueError: unsupported pickle protocol: 3 

तो कैसे को Python2 में लोड करने के लिए हालांकि, जब मैं को Python2 में लोड करने का प्रयास करें, मैं यह संदेश प्राप्त?

उत्तर

10

default pickling protocol अजगर 3 में डिफ़ॉल्ट रूप से उपयोग अजगर 2. द्वारा इस्तेमाल किया प्रोटोकॉल के साथ असंगत हालांकि, अगर आप कोड है कि wikilink.pickle पैदा करता है को संशोधित कर सकते हैं, तो आप यह पहले प्रोटोकॉल (0, 1 से एक का उपयोग करने के लिए बता सकते हैं है, या 2) जो पाइथन 2 बस ठीक समझ जाएगा।

चेतावनी दी जानी चाहिए कि, पाइथन 3 स्ट्रिंग्स पाइथन 2 में यूनिकोड स्ट्रिंग के रूप में आ जाएंगी, जो कुछ उपयोग मामलों में आश्चर्यजनक हो सकती है।

$ python3 
Python 3.4.1 (default, May 19 2014, 17:23:49) 
[GCC 4.9.0 20140507 (prerelease)] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pickle 
>>> pickle.dumps([1, 2, 'abc'], 2) 
b'\x80\x02]q\x00(K\x01K\x02X\x03\x00\x00\x00abcq\x01e.' 
>>> 
$ python 
Python 2.7.8 (default, Jul 1 2014, 17:30:21) 
[GCC 4.9.0 20140604 (prerelease)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cPickle 
>>> cPickle.loads('\x80\x02]q\x00(K\x01K\x02X\x03\x00\x00\x00abcq\x01e.') 
[1, 2, u'abc'] 
8

python3 में और को Python2 प्रारूप

#!/usr/bin/env python3 

import pickle 

with open("a.pkl", "rb") as f: 
    w = pickle.load(f) 

pickle.dump(w, open("a_py2.pkl","wb"), protocol=2) 

के रूप में सहेज तो फिर तुम को Python2 में a_py2.pkl लोड कर सकते हैं पढ़ें।

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