Python中使用pickle库进行数据的序列化存储
【摘要】
学习python的话,是不是有时候需要在本地存储一些数据,今天为大家来介绍一种新的实现方式:那就是使用python自带的pickle库。
先上一段代码来看一下pickle的基本使用:
import pickle # pickle的功能:序列化和反序列化 obj = { "userName": "小博", "jo...
学习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参数,具体用法可以自行查资料了解一下。
文章来源: xiaobotester.blog.csdn.net,作者:小博测试成长之路,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaobotester.blog.csdn.net/article/details/122725978
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)