Maison >développement back-end >Tutoriel Python >Explication détaillée de l'utilisation de la bibliothèque pickle

Explication détaillée de l'utilisation de la bibliothèque pickle

零下一度
零下一度original
2018-05-16 17:42:1254510parcourir

L'utilisation de la bibliothèque pickle est mentionnée dans l'article "Comprendre ce qu'est l'apprentissage automatique à travers un exemple simple", et cet article le développera davantage.

Alors pourquoi avez-vous besoin de sérialisation et de désérialisation ?

  1. Facile à ranger. Le processus de sérialisation transforme les informations textuelles en un flux de données binaires. De cette manière, les informations sont facilement stockées sur le disque dur Lorsqu'un fichier doit être lu, les données sont lues sur le disque dur puis désérialisées pour obtenir les données d'origine. Lorsque le programme Python est en cours d'exécution, certaines données telles que des chaînes, des listes et des dictionnaires sont obtenues. Je souhaite les conserver longtemps pour une utilisation future, au lieu de simplement les mettre en mémoire et de perdre les données à la mise sous tension. désactivé. Le module Pickle de la collection de modules python est pratique, il peut convertir des objets dans un format pouvant être transmis ou stocké.

  2. La fonctionloads() effectue la même désérialisation que la fonctionload(). Au lieu d'accepter un objet stream et de lire les données sérialisées à partir d'un fichier, il accepte un objet str contenant les données sérialisées et renvoie directement l'objet.

  3. Exemple de code :

  4. [python] view plain copy
    #!/usr/bin/env python  
    # -*- coding: UTF-8 -*-  
    import cPickle as pickle   
    obj = 123, "abcdedf", ["ac", 123], {"key": "value", "key1": "value1"}  
    print obj# 输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})      
    # 序列化到文件    
    with open(r"d:\a.txt", "r+") as f:  
        pickle.dump(obj, f)      
    with open(r"d:\a.txt") as f:  
        print pickle.load(f)# 输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})    
    # 序列化到内存(字符串格式保存),然后对象可以以任何方式处理如通过网络传输    
    obj1 = pickle.dumps(obj)  
    print type(obj1)# 输出:<type &#39;str&#39;>    
    print obj1# 输出:python专用的存储格式    
      
    obj2 = pickle.loads(obj1)  
    print type(obj2)# 输出:<type &#39;tuple&#39;>    
    print obj2# 输出:(123, &#39;abcdedf&#39;, [&#39;ac&#39;, 123], {&#39;key1&#39;: &#39;value1&#39;, &#39;key&#39;: &#39;value&#39;})

2. Facile à transférer. Lorsque deux processus communiquent à distance, ils peuvent s’envoyer différents types de données. Quel que soit le type de données, elles sont transmises sur le réseau sous la forme d'une séquence binaire. L'expéditeur doit convertir cet objet en une séquence d'octets avant de pouvoir le transmettre sur le réseau ; le récepteur doit restaurer la séquence d'octets en un objet.

  • Comprenez ce qu'est l'apprentissage automatique à travers un exemple simple

pickle est un module standard du langage python La bibliothèque pickle est incluse après l'installation. python. Pas besoin de l'installer séparément.
Le module pickle implémente la sérialisation et la désérialisation des données de base. Grâce à l'opération de sérialisation du module pickle, nous pouvons enregistrer les informations sur l'objet exécuté dans le programme dans un fichier et les stocker de manière permanente grâce à l'opération de désérialisation du module pickle, nous pouvons créer l'objet enregistré par le dernier programme à partir du fichier.
Dans l'introduction officielle, la description anglaise de l'opération de sérialisation comporte plusieurs mots, tels que "serializing", "pickling", "serialization", "marshalling" ou "flattening", etc., ils représentent tous la moyenne de la sérialisation. En conséquence, il existe de nombreux mots anglais pour les opérations de désérialisation, tels que « de-serializing », « unpickling », « deserailization », etc. Pour éviter toute confusion, utilisez généralement « décapage »/« décapage » ou « sérialisation »/« désérailisation ».
pickle Le module est sérialisé sous forme binaire et enregistré dans un fichier (le suffixe du fichier enregistré est ".pkl"), et ne peut pas être ouvert directement pour un aperçu. Un autre module standard de sérialisation de Python json est lisible par l'homme et peut être ouvert et visualisé directement (par exemple, visualisé dans notepad++).

Le module pickle dispose de deux principaux types d'interfaces, à savoir la sérialisation et la désérialisation.

est souvent utilisé de cette manière :

[python] view plain copy
import cPickle as pickle  
pickle.dump(obj,f)  
pickle.dumps(obj,f)  
pickle.load(f)  
pickle.loads(f)

L'opération de sérialisation comprend :

  • pickle.dump()
  • Les opérations de désérialisation comprennent :

  • Pickler(file, protocol).dump(obj)
  • pickle.load()

  • Unpickler(file).load()

2 序列化操作

2.1 序列化方法pickle.dump()

序列化的方法为 pickle.dump(),该方法的相关参数如下:
pickle.dump(obj, file, protocol=None,*,fix_imports=True)
该方法实现的是将序列化后的对象obj以二进制形式写入文件file中,进行保存。它的功能等同于 Pickler(file, protocol).dump(obj)
关于参数file,有一点需要注意,必须是以二进制的形式进行操作(写入)。
参考前文的案例如下:

import picklewith open(&#39;svm_model_iris.pkl&#39;, &#39;wb&#39;) as f:
    pickle.dump(svm_classifier, f)

file为’svm_model_iris.pkl’,并且以二进制的形式(’wb’)写入。

关于参数protocol,一共有5中不同的类型,即(0,1,2,3,4)。(0,1,2)对应的是python早期的版本,(3,4)则是在python3之后的版本。
此外,参数可选 pickle.HIGHEST_PROTOCOL和pickle.DEFAULT_PROTOCOL。当前,python3.5版本中,pickle.HIGHEST_PROTOCOL的值为4,pickle.DEFAULT_PROTOCOL的值为3。当protocol参数为负数时,表示选择的参数是pickle.HIGHEST_PROTOCOL。
关于参数protocol,官方的详细介绍如下:

Explication détaillée de lutilisation de la bibliothèque pickle

2.2 序列化方法pickle.dumps()

pickle.dumps()方法的参数如下:
pickle.dumps(obj, protocol=None,*,fix_imports=True)
pickle.dumps()方法跟pickle.dump()方法的区别在于,pickle.dumps()方法不需要写入文件中,它是直接返回一个序列化的bytes对象。

2.3 序列化方法Pickler(file, protocol).dump(obj)

pickle模块提供了序列化的面向对象的类方法,即 class pickle.Pickler(file, protocol=None,*,fix_imports=True),Pickler类有dump()方法。
Pickler(file, protocol).dump(obj) 实现的功能跟 pickle.dump() 是一样的。
关于Pickler类的其他method,请参考官方API。

插播一条硬广:技术文章转发太多,本文来自微信公众号:“Python数据之道”(ID:PyDataRoad)。

3 反序列化操作

3.1 反序列化方法pickle.load()

序列化的方法为 pickle.load(),该方法的相关参数如下:
pickle.load(file, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)
该方法实现的是将序列化的对象从文件file中读取出来。它的功能等同于 Unpickler(file).load()
关于参数file,有一点需要注意,必须是以二进制的形式进行操作(读取)。
参考前文的案例如下:

import picklewith open(&#39;svm_model_iris.pkl&#39;, &#39;rb&#39;) as f:
    model = pickle.load(f)

file为’svm_model_iris.pkl’,并且以二进制的形式(’rb’)读取。

读取的时候,参数protocol是自动选择的,load()方法中没有这个参数。

3.2 反序列化方法pickle.loads()

pickle.loads()方法的参数如下:
pickle.loads(bytes_object, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)
pickle.loads()方法跟pickle.load()方法的区别在于,pickle.loads()方法是直接从bytes对象中读取序列化的信息,而非从文件中读取。

3.3 反序列化方法Unpickler(file).load()

pickle模块提供了反序列化的面向对象的类方法,即 class pickle.Unpickler(file, *,fix_imports=True, encoding="ASCII". errors="strict"),Pickler类有load()方法。
Unpickler(file).load() 实现的功能跟 pickle.load() 是一样的。
关于Unpickler类的其他method,请参考官方API。

4 那些类型可以进行序列化和反序列化操作

官方文档是这么介绍的,这里我就不进一步描述了。

Explication détaillée de lutilisation de la bibliothèque pickle

写在后面

pickle模块还是比较实用的,当然,关于pickle模块,其实还有许多的信息可以去了解,想了解更多信息的童鞋,建议可以阅读下python官方的API文档(library文件)。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn