python模块:pickle(对象序列化和反序列化)

Pickle模块用来对Python对象执行序列化和反序列化。Python的任何对象都可以通过它永久保存到硬盘文件。Pickle实际上是先把Python对象(list、dict、class等)转换为字符流,这个字符流包含反序列化(从字符流构建对象)所需的所有数据。

No More Bullshit!
首先导入pickle模块:

import pickle

pickle有两个主要方法。第一个是dump-把对象导入到文件;第二个是load-从文件中加载对象。
示例:

import pickle
 
l1 = ['data1','data2','data3', 'data4']
 
file = open("testfile",'wb') 
 
# 把l1保存到文件
pickle.dump(l1, file)   
 
file.close() 
 
####################################
 
file = open("testfile",'r')
 
# 从文件中加载保存的对象
l2 = pickle.load(file)  
 
print(l2)
print(l1 == l2)

输出:

《python模块:pickle(对象序列化和反序列化)》 Screen Shot 2016-01-31 at 18.32.04

你可以看一下testfile文件中的内容,里面是可读的文件(不是二进制流)。

$ cat testfile 
(lp0
S'data1'
p1
aS'data2'
p2
aS'data3'
p3
aS'data4'
p4

pickle用法总结:
把程序执行状态保存到文件,在下次启动程序时恢复到退出时的状态。
在分布式系统中通过TCP连接发送数据。
在数据库中存储Python对象
把不可读的Python对象转为字符串,可以用来做字典的key(可以用来做缓存)。

有一点需要注意,pickle还有一个c版本cpickle,它的执行效率是pickle的1000倍。
为了兼容,导入方法如下:

try:
  import cPickle as pickle
except ImportError:
  import pickle

虽然cpickle效率比较高,但是不建议使用,因为:
pickle可以处理unicode对象
pickle是纯Python写的,调试简单

    原文作者:七月尾巴_葵花
    原文地址: https://www.jianshu.com/p/07c7d440ae69
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞