python 序列化和反序列化

  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‘  

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

时间: 2024-10-09 02:46:00

python 序列化和反序列化的相关文章

Python序列化与反序列化-json与pickle

Python序列化与反序列化-json与pickle 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.json的序列化方式与反序列化方式 1>.json序列化 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90

python序列化与反序列化(json与pickle)

在python中,序列化可以理解为将python中对象的编码格式转换为json(pickle)格式的字符串,而反序列化可以 理解为将json(pickle)格式的字符串转换为python中对象的编码格式 举一个简单的例子,我们在vmvare环境下编写python程序,然后需要临时走开一下,但是我们又不想把这个vmvare关闭,这个时候我们可以选择挂机,这样我们再回来继续操作时候,就可以直接恢复到走之前的状态,那么我们之前编写的代码及vmvare的状态是保存在哪里了呢,实际上是保存在文件当中来了,

Python—序列化和反序列化模块(json、pickle和shelve)

什么是序列化 我们把对象(或者变量)从内存中变为可存储或者可传输的过程称为序列化.在python中为pickling,在其他语言中也被称之为serialization,marshalling,flattening等等.即序列化之后就可以将内存中的程序内容写入硬盘或者通过网络传输到其他机器上去.反序列化的过程则相反:将硬盘中的内容变为可以在内存中运行的程序的过程称为反序列化. Json模块 # encoding:utf-8 # 通过序列化和反序列化将内容存储到文件 import json json

python序列化与反序列化(json、pickle)

1.什么是序列化&反序列化? 序列化:将字典.列表.类的实例对象等内容转换成一个字符串的过程. 反序列化:将一个字符串转换成字典.列表.类的实例对象等内容的过程 PS:Python中常见的数据结构可以统称为容器.序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 场景一:我们在python中将一个功能给另外一段程序使用,怎么给? 方法一:功能存到文件,然后另一个python程序再从文件里读出来. 场景二:现在反过来怎么把读出来的文件字符串转换成字典? 方法二:eval()函

接口测试基础三-Python序列化和反序列化

啥是序列化?啥是反序列化?这两个词听起来优点高大上的意思,其实呢不然,很简单的可以理解为: 序列化:将python的数据对象编码转换为json格式的字符串 反序列化:将json格式的字符串解码为python的数据对象 在python中提供了json库,我们将json导入,查看json库下面有哪些方法: >>> import json >>> print (json.__all__) ['dump', 'dumps', 'load', 'loads', 'JSONDeco

python序列化与反序列化——json与pickle

一.定义 序列化是指将对象从内存中取出来写入存储区,如txt文件中,反序列则相反. 二. 应用场景 跨平台数据传输: 保留上一次运行程序时对对象的修改 三. 模块和函数 1. json dumps().dump()(序列化) loads().load() (反序列化) 2. pickle dumps().dump()(序列化) loads().load ()(反序列化) 四.  应用案例 1. pickle 1 import pickle 2 3 info = {"lyrics": &

Python序列化与反序列化pickle

#要将Python对象作为一个文件的形式保存到磁盘,就叫序列化:#当我们需要用到这个这对象,再从磁盘加载这个对象,就叫反序列化#Python自带的pickle可以帮我们实现,pickle这个单词是咸菜的意思,咸菜耐储存,是不是很形象呀? #对象的存储分为两步:#1.将对象在内存中的数据抓取取来,转换成一个有序的文本,这一步就是序列化#2.再将文本存储到磁盘中 import pickle class Bird(object): have_feather = True reproduction_me

Python_日记 序列化和反序列化

Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功能. pickle模块 存储在变量中 dumps(obj)返回存入的字节 dic = {'age': 23, 'job': 'student'} byte_data = pickle.dumps(dic) # out -> b'\x80\x03}q\x00(X\x03\x00\x00\...' pr

Python Special Syntax 8: 序列化与反序列化-->华丽丽的叫 pickle(泡菜?!)

直接上代码吧 #-*-coding:utf-8 import os if os.path.exists('d:\\cpickle.data'): os.remove('d:\\cpickle.data') import cPickle as P shoplist=['apple','banana','pear'] P.dump(shoplist,file('d:\\cpickle.data','w')) f=file('d:\\cpickle.data') while True: content