码迷,mamicode.com
首页 > 编程语言 > 详细

python 序列化和反序列化

时间:2019-02-18 01:30:16      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:传输   load   就是   open   识别   python类   file   格式   rip   

  1. 概念
    序列化:
    将对象的状态信息转换为可以存储或传输的形式的过程。就是把对象转换成字符串的过程
    
    反序列化:
    把字符串转换成python可以识别的数据类型对象的过程
  2. 应用
    #数据存储
    
    #网络传输
  3. 模块
    1. json
      #通用的序列化格式
      #只有少部分数据类型能通过json转换(数字,字符串,列表,字典,元组)
      #写文件的操作时,如果找不到ascii码的格式,就会自动转成bytes,所以要添加ensure_ascii=False的参数
      #能多次写,但不能多次读
      import json
      
      dic = {k1,v1}
      
      #在内存中操作
      #序列化
      str_d = json.dumps(dic)
      #反序列化
      dic_d = json.loads(str_d)
      
      #直接对文件操作
      #序列化
      f = open(file,w)
      json.dump(dic,f)
      #反序列化
      f = open(file)
      ret = json.load(f)
      
      #如果要读写多行,用对文件的每次读一行,和写的时候添加\n进行处理
      #
      l = [dic1,dic2,dic3]
      f = open(file,w)
      for dic in l:
          str_d = json.dumps(dic)
          f.write(str_d+\n)
      f.close()
      
      #
      f = open(file)
      l = []
      for line in f:
          dic = json.loads(line.strip())
          l.append(dic)
      f.close()
    2. pickle
      #支持对所有python类型的处理
      #使用pickle的读写文件的操作时,是以bytes形式的,所以open要用加b的模式
      
      dic = {k1:v1, k2,:v2}
      
      #在内存中操作
      #序列化
      str_d = pickle.dumps(dic)
      #反序列化
      dic_d = pickle.loads(str_d)
      
      #对文件的操作
      #序列化
      f = open(file,wb)
      pickle.dump(dic,f)
      #反序列化
      f = open(file,rb)
      dic_d = pickle.load(f)
      
      #pickle直接支持多次读写
    3. shelve
      #一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
      
      import shelve
      
      #序列化
      f = shelve.open(file)
      f[key] = {k1:v1, k2:v2}
      f.close()
      
      #反序列化
      f = shelve.open(file)
      ret = f[key]    #如果key不存在会报错
      f.close()

      #如果我们对序列化文件的内容进行修改,比如下面的操作,不会被保存,需要令writeback=True。但这方法会增加额外的内存消耗
      f = shelve.open(‘file‘)
      f[‘key‘][‘k1‘] = ‘hahaha‘  #没有被保存
      #需要这么写
      f = shelve.open(‘file‘,writeback=True)
      f[‘key‘][‘k1‘] = ‘hahaha‘  

       

python 序列化和反序列化

标签:传输   load   就是   open   识别   python类   file   格式   rip   

原文地址:https://www.cnblogs.com/walthwang/p/10393334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!