0
点赞
收藏
分享

微信扫一扫

Python中使用pickle库进行数据的序列化存储


学习python的话,是不是有时候需要在本地存储一些数据,今天为大家来介绍一种新的实现方式:那就是使用python自带的pickle库。

先上一段代码来看一下pickle的基本使用:

import pickle  # pickle的功能:序列化和反序列化


obj = {
"userName": "小博",
"job": "软件测试",
"订阅号": "小博测试成长之路",
"wx": "xiaobotester"
}
# dumps和loads主要是在内存内操作
a1 = pickle.dumps(obj)
print('a1:', type(a1), a1)
b1 = pickle.loads(a1)
print('b1:', type(b1), b1)


# dump和load是从文件内操作
with open("demo.db", "wb") as f:
pickle.dump(obj, f) # dump函数没有返回值


with open("demo.db", "rb") as f2:
b2 = pickle.load(f2)
print("b2:", type(b2), b2)

以上代码运行后的输出结果:

a1: <class 'bytes'> b'\x80\x03}q\x00(X\x08\x00\x00\x00userNameq\x01X\x06\x00\x00\x00\xe5\xb0\x8f\xe5\x8d\x9aq\x02X\x03\x00\x00\x00jobq\x03X\x0c\x00\x00\x00\xe8\xbd\xaf\xe4\xbb\xb6\xe6\xb5\x8b\xe8\xaf\x95q\x04X\t\x00\x00\x00\xe8\xae\xa2\xe9\x98\x85\xe5\x8f\xb7q\x05X\x18\x00\x00\x00\xe5\xb0\x8f\xe5\x8d\x9a\xe6\xb5\x8b\xe8\xaf\x95\xe6\x88\x90\xe9\x95\xbf\xe4\xb9\x8b\xe8\xb7\xafq\x06X\x02\x00\x00\x00wxq\x07X\x0c\x00\x00\x00xiaobotesterq\x08u.'
b1: <class 'dict'> {'userName': '小博', 'job': '软件测试', '订阅号': '小博测试成长之路', 'wx': 'xiaobotester'}
b2: <class 'dict'> {'userName': '小博', 'job': '软件测试', '订阅号': '小博测试成长之路', 'wx': 'xiaobotester'}

从上面这段代码运行的结果可以看出,通过pickle序列化存储之后的数据,再次加载出来的时候,还是保留了之前的格式。这个对于我们进行数据处理的时候,方便了很多。

注意事项:

1、pickle只能用于python程序中。(也就是说,将python程序序列化存储的文本文件,用其他语言去解析是会有问题的)

2、在使用的时候,要注意dumps/loads与dump/load的使用区别,前者是在内存中进行操作,后者是在文件中进行操作。

3、pickle是以bytes类型来进行序列化的,dump/dumps方法调用的时候还可以传protocol和fix_imports参数,具体用法可以自行查资料了解一下。



举报

相关推荐

0 条评论