The use of the pickle library is mentioned in the article "Understanding what machine learning is through a simple example", and this article will further elaborate on it.
So why do we need the operations of serialization and deserialization?
Easy to store. The serialization process turns textual information into a stream of binary data. In this way, the information is easily stored in the hard disk. When a file needs to be read, the data is read from the hard disk and then deserialized to obtain the original data. When the Python program is running, some data such as strings, lists, and dictionaries are obtained. I want to save them for a long time for future use, instead of simply putting them in the memory and losing the data when the power is turned off. The Pickle module in the python module collection comes in handy, it can convert objects into a format that can be transmitted or stored.
The loads() function performs the same deserialization as the load() function. Instead of accepting a stream object and reading the serialized data from a file, it accepts a str object containing the serialized data and returns the object directly.
Code example:
[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 'str'> print obj1# 输出:python专用的存储格式 obj2 = pickle.loads(obj1) print type(obj2)# 输出:<type 'tuple'> print obj2# 输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})
2. Easy to transmit. When two processes communicate remotely, they can send various types of data to each other. No matter what type of data it is, it is transmitted over the network in the form of a binary sequence. The sender needs to convert this object into a byte sequence before it can be transmitted on the network; the receiver needs to restore the byte sequence into an object.
Understand what machine learning is through a simple example
pickle is a standard module of the python language. The pickle library is included after installing python. No need to install it separately.
The pickle module implements basic data serialization and deserialization. Through the serialization operation of the pickle module, we can save the object information running in the program to a file and store it permanently; through the deserialization operation of the pickle module, we can create the object saved by the last program from the file.
In the official introduction, the English description of the serialization operation has several words, such as "serializing", "pickling", "serialization", "marshalling" or "flattening", etc., they all represent serialization mean. Correspondingly, there are many English words for deserialization operations, such as "de-serializing", "unpickling", "deserailization", etc. To avoid confusion, generally use "pickling"/"unpickling", or "serialization"/"deserailization". pickle
The module is serialized in binary form and saved to a file (the suffix of the saved file is ".pkl"), and cannot be opened directly for preview. Another serialization standard module of python, json
, is human-readable and can be opened and viewed directly (for example, viewed in notepad++).
The pickle module has two main types of interfaces, namely serialization and deserialization.
is often used in this way:
[python] view plain copy import cPickle as pickle pickle.dump(obj,f) pickle.dumps(obj,f) pickle.load(f) pickle.loads(f)
The serialization operation includes:
pickle.dump()
Deserialization operations include:
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('svm_model_iris.pkl', 'wb') 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,官方的详细介绍如下:
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('svm_model_iris.pkl', 'rb') 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 那些类型可以进行序列化和反序列化操作
官方文档是这么介绍的,这里我就不进一步描述了。
写在后面
pickle模块还是比较实用的,当然,关于pickle模块,其实还有许多的信息可以去了解,想了解更多信息的童鞋,建议可以阅读下python官方的API文档(library文件)。
The above is the detailed content of Detailed explanation of the use of pickle library. For more information, please follow other related articles on the PHP Chinese website!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Linux new version
SublimeText3 Linux latest version

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!
