Pickle 的使用 | 学习笔记

简介: 快速学习 Pickle 的使用

开发者学堂课程【Python 入门 2020年版:Pickle 的使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10406


Pickle 的使用

内容介绍:

一、Pickle 的序列化和反序列化

二、Pickle 的使用(其一)

三、Pickle 的使用(其二)

 

一、Pickle 的序列化和反序列化

python 里存入数据只支持存入字符串和二进制

json 是将 python 里的数据

( str/list/tuple/dict/int/fLoat/booL/None) 等转换成为对应的 json

pickLe 是将 Python 里任意的对象转换成为二进制,计算机本质上存储的数据、保存的数据、传输的数据等等,不管是什么都是二进制形式,所以不管是什么类型的数据都可以转换成二进制。

pickLe 将数据持久(序列化)有两个方法:

dumps: 将数据转换成为二进制,不会将数据保存到文件里。

dump: 将数据转换成为二进制,同时保存到指定文件。

pickLe 反序列化也有两个方法:

Loads: 将二进制加载成为 Python 数据。

Load: 读取文件,并将文件的二进制内容加载成为 Python 数据。

 

二、Pickle 的使用(其一)

Pickle 的使用代码情况(其一)如下:

names =["张三",李四·,'杰克',‘亨利']

#可以把它转成这个 json 数据,但是同时也可以把它变成一个二进制。

b_names = pickle.dumps ( names)

#把表格数据转换成二进制形式。

file = open( ' names.txt', ‘wb')

#打开 names.txt 文件,以“wb”的形式读取。

file.write(b_names)

#读取的内容是二进制就以二进制的形式写入,并不是纯文本形式写入。file.close()

#写入后,打开这个文件会发现有很多乱码,这里不管用什么方法都加载不了,因为写入的数据是二进制形式,不是纯文本,这里要求大家不要修改或改动代码,因为此时数据已经写进去了。

file1 = open( ‘names.txt' , 'rb')

#以二进制的形式打开文件 names.txt。

x = file1.read()

#先读出二进制数据。

y = pickle.loads(x)]

#再将二进制数据加载成为 Python 中的列表数据。

print(y)

file1.close()

#关闭文件,就可以重新加载数据。

 

三、Pickle 的使用(其二)

1.Pickle 的使用代码情况(其二)如下:

file2 = open( ‘names.txt', 'wb')

#打开 names.txt 文件,以“wb”的形式读取。

pickle.dump(names,file2) 

#file2 数据加载进去,这一步代码不相当于上面的三步代码:

(file = open( ' names.txt', ‘wb')

file.write(b_names)

file.close( ))

file2.close()

#将数据转成二进制同时写入。

file3 = open( ‘names.txt' , 'rb')

#以二进制的形式打开文件 names.txt。

pickle. load(file3)

#再将数据加载回来,结果是列表形式。

2. Dump、load 的功能十分强大, 

下面举一个例子:

class Dog(object):

def _init_(self, name,color):

self.name = name

self.color = color

#对象“狗”的属性有名字和颜色。

def eat(self):

print(self.name + '正在吃东西')

#可以使用 eat 方法。

d = Dog('大黄',‘白色')

#对象“狗”的名字是“大黄”,颜色是“白色”。

pickle.dump(d,open( ' dog.txt' , 'wb'))

#将对象原封不动的以“wb”形式存入文件 dog.txt 中,存入的内容可以直接点击 dog.txt 文件查看。

d = Dog( '大黄',‘白色’)

pickle.dump(d,open( ‘dog.txt ', 'wb'))

dd = pickle.load(open( 'dog.txt' , ‘rb'))

#也可以使用 load 以二进制的形式将数据重新加载回来。

dd.eat()

print(dd.name)

print(dd.color)

#存进去的数据,重新从文件中被加载出来是完全相同的。

保存了内存里面的数据,把数据直接储存起来,以前有什么属性,储存后就有什么属性,会原封不动的保存下来,以上是我们说的 Pickle 和 json 的使用方法。

相关文章
|
6月前
|
JSON 安全 数据格式
详解python pickle中的反序列化漏洞
今天我们来聊聊Python里的反序列化攻击。先来看看什么是序列化和反序列化。简单来说,序列化就是把数据结构转换成字节流,这样我们就可以把数据保存到文件里或者通过网络传输。反序列化则是把这些字节流再转换回原来的数据结构。 在Python里,常用的模块之一就是Pickle。它可以帮我们很方便地进行序列化和反序列化操作。比如,你可以把一个复杂的Python对象序列化保存下来,等需要用的时候再反序列化回来。 反序列化攻击的概述 反序列化过程有漏洞:如果我们反序列化了一个不可信的数据源,那就可能引发反序列化攻击。攻击者可以在序列化的数据里嵌入恶意代码,当你反序列化这个数据时,这些恶意代码就会被执
|
7月前
|
数据挖掘 索引 Python
Python 教程之 Pandas(15)—— 使用 pandas.read_csv() 读取 csv
Python 教程之 Pandas(15)—— 使用 pandas.read_csv() 读取 csv
73 0
|
存储 JSON 数据格式
【Python标准库】Pickle库与序列化
【Python标准库】Pickle库与序列化
|
Python
Python对txt、csv文件读写数据
Python对txt、csv文件读写数据
85 0
|
Python
Python文件读写、StringIO和BytesIO
Python文件读写、StringIO和BytesIO
85 0
|
存储 SQL JSON
Python 之 Pandas 文件操作和读取 CSV 参数详解
Python 之 Pandas 文件操作和读取 CSV 参数详解
dataframe文件写入pickle文件和写入csv效率对比
dataframe文件写入pickle文件和写入csv效率对比
188 0
dataframe文件写入pickle文件和写入csv效率对比
|
存储 JSON 前端开发
Json 和 pickle 的区别 | 学习笔记
快速学习 Json 和 pickle 的区别
Json 和 pickle 的区别 | 学习笔记
|
索引 Python
Pandas文件读取
Pandas文件读取
101 0