Tengo un archivo pickle, con

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

Puedo cargar en python3.
Sin embargo, cuando trato de cargar en python2, me sale este mensaje:
Traceback (la mayoría de llamada reciente pasado):

  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

Así como de la carga en python2?

OriginalEl autor epx | 2015-04-12

2 Comentarios

  1. 14

    La por defecto el decapado de protocolo que se utiliza por defecto en Python 3 es incompatible con el protocolo que utiliza Python 2. Sin embargo, si usted puede modificar el código que produce wikilink.pickle, se puede decir que el uso de uno de los primeros protocolos (0, 1, o 2) que Python 2 le entiendo muy bien.

    Se advirtió, sin embargo, que en Python 3 cadenas vendrá como Unicode cadenas en Python 2, que puede ser sorprendente en algunos casos de uso.

    $ 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']

    OriginalEl autor user4815162342

  2. 25

    Leer en python3 y guárdelo como python2 formato

    #!/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)

    A continuación, puede cargar a_py2.pkl en python2.

    OriginalEl autor Liang Xiao

Dejar respuesta

Please enter your comment!
Please enter your name here