[PYTHON] pickle Pour lire ce qui a été fait en 2 séries avec 3 séries

Je veux pickle.dump le 2ème système et pickle.load le 3ème système.

Diverses spécifications sont répertoriées: http://docs.python.jp/3.4/library/pickle.html

Un peu après être passé au 3ème système, je voulais lire les données sauvegardées par le pickle précédemment créé, mais une erreur s'est produite.

Erreur

pickle-load-error.


# test_w_2.pkl est un système 2[1]Fichier de vidage
In [25]: fin = open('test_w_2.pkl', 'r') 
In [26]: pickle.load(fin)    
TypeError: a bytes-like object is required, not 'str'       

J'obtiens une erreur comme celle-ci, n'est-ce pas str? Il semble que je dois faire des octets

Solution

Il semble que vous devriez ajouter'rb 'à l'option au moment de ʻopen` (mode binaire)

piclkle-load.


In [38]: fin = open('test_wb_2.pkl', 'rb')
In [39]: pickle.load(fin)                                                                              
Out[39]: [1]   

[Ajout] Lorsque le vidage est une chaîne

Dans l'exemple ci-dessus, seul «[1]» a été vidé. Il semble qu'il ne soit pas possible de charger si la liste contient une chaîne de caractères. Lorsque vous faites pickle.load, changez la méthode d'encodage avec ʻencoding = 'bytes'. Il est nécessaire de convertir le contenu de la liste reçue en chaîne en utilisant .decode ('utf8')`.

python2.7.9

pickle.dump


>>> pickle.dump(['AIUEO'], open('test.pkl', 'w')  )

python3.5.0

pickle.load


#Lire normalement et erreur
>>> pickle.load(open('test.pkl', 'r') )                                                                
Traceback (most recent call last):                                                                     
  File "<stdin>", line 1, in <module>                                                                  
TypeError: a bytes-like object is required, not 'str'                                                  

#Même si vous le lisez en binaire'ascii'Erreur car elle ne correspond pas à
>>> pickle.load(open('test.pkl', 'rb') )                                                               
Traceback (most recent call last):                                                                     
  File "<stdin>", line 1, in <module>                                                                  
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)      

#Je pourrais le lire après avoir changé la méthode de codage, mais je ne peux pas le lire en octets.
>>> pickle.load(open('test.pkl', 'rb'), encoding='bytes' )                                             
 [b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a']                                      

# decode('utf8')Utilisez pour décoder chaque élément de la liste
>>> list(map(lambda x: x.decode('utf8'), pickle.load(open('test.pkl', 'rb'), encoding='bytes' ) ) )    
 ['AIUEO']  

[Ajout] Au contraire, pour lire ce qui a été fait en 3 séries en 2 séries

S'il est normalement fait avec 3 séries (vidage), il ne peut pas être lu (charge) avec 2 séries Il est écrit dans l'URL que j'ai écrite au début, mais il semble que vous puissiez spécifier protocole. Vous trouverez ci-dessous une description de chaque version de protocole

-Le protocole version 0 est le protocole original "lisible par l'homme", qui est rétrocompatible avec les versions antérieures de Python.

Bien sûr, dans la série python2, il n'y a que jusqu'à 2 protocoles, il semble donc préférable de faire correspondre cela avec python3 également. (Parce que les gens autour de moi n'utilisent pas beaucoup le système python2) Pour autant que je puisse voir, 4 semble être le meilleur, il semble donc préférable de le spécifier lorsque vous ne l'utilisez que. À propos, la valeur par défaut est 3.

python3.5

pickle.dump


>>> pickle.dump(['AIUEO'], open('test.pkl','wb'), protocol=2 ) 

python2.7

pickle.load


>>> pickle.load(open('test.pkl') ) 
[u'\u3042\u3044\u3046\u3048\u304a']  
>>> print(pickle.load(open('test.pkl') )[0] )
AIUEO

Résumé

Si vous ajoutez "rb", c'est tout à fait le cas (pour l'instant) Il existe d'autres options pour fix_imports et ʻerrors`, mais pour l'instant cela fonctionne. Je l'ajouterai lorsqu'une scène qui ne bouge pas apparaîtra.

Recommended Posts

pickle Pour lire ce qui a été fait en 2 séries avec 3 séries
Ce à quoi j'étais accro avec json.dumps dans l'encodage base64 de Python
Comment lire les données de séries chronologiques dans PyTorch
J'étais accro au grattage avec Selenium (+ Python) en 2020
Ce que j'ai fait quand j'étais en colère de le mettre avec l'option enable-shared
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Que faire avec l'installation de Magics
Numer0n avec des objets fabriqués avec Python
J'ai essayé de résumer ce qui était sorti avec Qiita avec Word cloud
Que faire avec la sortie de PYTHON?
Lire des fichiers en parallèle avec Python
Que faire si vous vous perdez dans la référence de fichier avec FileNotFoundError
Maintenance de l'environnement réalisée avec Docker (je souhaite post-traiter GrADS en Python
Que faire si vous ne pouvez pas installer avec pip dans l'environnement babun
Téléchargez ce que vous avez dans la demande vers S3 avec AWS Lambda Python
Que faire lorsque la version Python est ancienne dans Cloud 9 créée par une autre personne
Essayez de vous connecter à qiita avec Python
Comment utiliser BigQuery en Python
Pour faire fonctionner la station d'horodatage en Python
Ce que j'étais accro à Python autorun
Comment lire des fichiers CSV avec Pandas
Ajouter une série à la colonne dans les pandas python
Comment lire les données de problème avec Paiza
Lire des caractères dans des images avec Python OCR
Livres sur la science des données à lire en 2020
Ce à quoi j'étais accro lors de la création d'applications Web dans un environnement Windows
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Agrégation pratique de séries chronologiques avec TimeGrouper de pandas
Comment gérer les fuites de mémoire dans matplotlib.pyplot
Jusqu'à ce que vous définissiez ce que vous avez fait avec Django avec Jenkins
Comment lire un fichier CSV avec Python 2/3
Connectez-vous à un serveur distant avec SSH
[REAPER] Comment jouer à Reascript avec Python
Que faire si pipreqs aboutit à UnicodeDecodeError
Convertissez des PDF en images en masse avec Python
Python: j'ai pu récurer en lambda
Résumé de ce qui a été utilisé dans 100 coups de Pandas (# 1 ~ # 32)
Comment utiliser la bibliothèque d'images Python dans la série python3
J'ai essayé d'intégrer Keras dans TFv1.1
[Python] Comment lire des fichiers Excel avec des pandas
ne peut pas décaper. Comment gérer les objets Annoy
Lire les données de la table dans un fichier PDF avec Python
Comment gérer les erreurs d'exécution dans subprocess.call
Lisez "Ordinateur Quantum fabriqué en 14 jours". Troisième jour
Convertir des fichiers CSV UTF-8 pour les lire dans Excel
Connectez-vous à Yahoo Business avec Selenium Python
Connectez-vous facilement à AWS avec plusieurs comptes
Comment utiliser tkinter avec python dans pyenv
Enregistrer l'objet dans un fichier avec pickle
Lisez "Ordinateur Quantum fabriqué en 14 jours". Premier jour
Que dois-je faire avec DICOM de MPEG2?
Que faire pour obtenir une feuille de calcul Google en Python
Comment lire des fichiers dans différents répertoires
Matériel à lire lors de la mise en route de Python
Ce à quoi j'étais accro en combinant l'héritage de classe et l'héritage de table commune dans SQLAlchemy
Lire et écrire en compressant des variables telles que DataFrame avec joblib au lieu de pickle
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur