有时候需要临时将数据存储起来,方便下次运行程序时可以直接调用,或者不同线程之间交换数据都是可以用序列化的方式把数据存储起来,然后调用,这里我们以pickle包来解释python中的序列化与反序列化。

什么是序列化与反序列化

  • 序列化:将python数据转换成二进制的数据流。
  • 反序列化:将二进制的数据流转换成pytho对象。

python模块pickle的实现

  • dumps():调用此函数将python数据对象转换成数据流
  • loads():调用此函数将存储的数据流转换成python数据对象

下面是python中使用pickle实例演示python中的序列化与反序列化

pickle例子:使用文件

1.pickle.dump(obj, file, protocol = None, *, fix_imports = True)

import pickle 
  
def storeData(): 
    # 初始化存储数据
    chunjiang = {'key' : 'chunjiang', 'name' : 'zhang chunjiang', 
    'age' : 18, 'pay' : 100} 
    muke = {'key' : 'muke', 'name' : 'li muke', 
    'age' : 40, 'pay' : 500} 
  
    # 数据库 
    db = {} 
    db['chunjiang'] = chunjiang 
    db['muke'] = muke 
      
    # 二进制模式
    dbfile = open('lizi_pickle', 'ab') 
      
    # 存储 
    pickle.dump(db, dbfile)                      
    dbfile.close() 
  
def loadData(): 
    # 导入数据
    dbfile = open('lizi_pickle', 'rb')      
    db = pickle.load(dbfile) 
    for keys in db: 
        print(keys, '=>', db[keys]) 
    dbfile.close() 
  
if __name__ == '__main__': 
    storeData() 
    loadData() 

结果如下:

pickle

pickle例子:不使用文件

import pickle
chunjiang = {'key' : 'chunjiang', 'name' : 'zhang chunjiang', 
    'age' : 18, 'pay' : 100}
muke = {'key' : 'muke', 'name' : 'li muke', 
    'age' : 40, 'pay' : 500} 
  
#  数据库
db = {} 
db['chunjiang'] = chunjiang 
db['muke'] = muke 
  
# 存储
b = pickle.dumps(db)       # type(b) gives <class 'bytes'> 
  
# 导入
mydata = pickle.loads(b) 
print(mydata) 

pickle_no_file

总结

这篇博客主要就python中数据对象的序列化和反序列化进行了简单介绍和详细代码示例。