位置: IT常识 - 正文

一文了解Python序列化(python的顺序)

编辑:rootadmin

推荐整理分享一文了解Python序列化(python的顺序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python序数,python的序列包括什么,python序数,python什么叫序列,python 序号,python中的序列主要有哪三种,python的序列类型有哪些,python的序列类型有哪些,内容如对您有帮助,希望把文章链接给更多的朋友!

程序运行时,所有的变量都储存在内存中,程序结束运行时,这些占用的内存将被系统回收,无法长期储存,将这些变量转换为可储存或可通过网络传输的过程称之为序列化(pickling),序列化后就可以将它们储存在磁盘或通过网络进行传输。

1.pickle序列化

Python提供了pickle模块来实现变量的序列化,这个模块可以将变量转换成字节码(bytes)形式储存,还能将储存的序列化字节码重新还原成数据对象;

注意:pickle仅能用于python程序之间交换数据,且不同的版本之间并不兼容,需要和其他程序进行通信时,请使用json序列化,它可以在不同编程语言间共享数据。

a.pickle普通对象序列化

一文了解Python序列化(python的顺序)

先来看一个小实例,使用pickle模块,将几个不同的对象序列化,这些序列化后的对象可用于网络传输或储存到磁盘文件中:

#!/usr/bin/envpython3#coding=utf-8importosimportpickle#创建一个字典对象和一个字符串对象d=dict(one=1,two=2,three=3)s="python"print(d)#输出{'three':3,'two':2,'one':1}print(s)#输出#将这两个对象序列化,nd和ns仅保存在内存中,可用于网络传输nd=pickle.dumps(d)ns=pickle.dumps(s)print(nd)#输出字节码"b'\x80\x03}q\x00...."print(ns)#输出字节码"b'\x80\x03X\x11...."#将序列化后的对象重新还原成数据(假设接收端接收到这些数据后,就能够这样还原)nd=pickle.loads(nd)ns=pickle.loads(ns)print(nd)#输出{'three':3,'two':2,'one':1}print(ns)#输出#创建一个文件testfile,接收字节码(wb),将d对象中的数据写入其中,#用于本地不同应用程序之间数据交换(此时如果我们打开testfile文件,#就会看到一些类似乱码一样的字符,实际上是d对象序列化后的数据)withopen("testfile","wb")asf1:pickle.dump(d,f1)#从testfile文件中读取字节码,还原成数据ifos.path.isfile("testfile"):withopen("testfile","rb")asf2:print(f2.read())#输出"b'\x80\x03}q\x0...."#因为上一步读取了数据,指针位置要重新设置成起始位置,#这仅仅是为了演示给大家看,上面print和seek这两句可以不写f2.seek(0)d=pickle.load(f2)#读取f2中的数据还原print(d)#输出{'three':3,'two':2,'one':1}

总结:仅在内存中序列化和还原,使用dumps()和loads(),要将数据序列化后保存到文件中使用dump(),从文件中还原数据使用load(),两者只有一个s的区别,注意不要混淆。

b.pickle类序列化

有时候我们可能要传输或保存一个类对象与其中所有的数据,python中实现类的序列化十分简单,与对象序列化没有什么区别,请看下面的实例:

#!/usr/bin/envpython3#coding=utf-8importpickle########classA:#--------def__init__(self,name="py",website="python"):self.name=nameself.website=websitex=A()x.name="晴刃"#序列化类实例x,可用于网络传输nx=pickle.dumps(x)print(nx)#输出"b'\x80\x03c__main__...."#还原数据nx=pickle.loads(nx)print(nx)#输出"<__main__.Aobjectat0x7f43c995c080>"#将类对象序列化后保存到磁盘文件中,可用于程序间数据交换withopen("testfile","wb")asf1:pickle.dump(x,f1)#读取文件中的数据还原withopen("testfile","rb")asf1:y=pickle.load(f1)print(y.name)#输出"晴刃"print(y.website)#输出

2.json序列化

如果要在不同的编程语言之间传递对象,可以使用python的json模块对数据进行序列化,json序列化后所有数据都被表示成字符串形式,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输,但在类数据转换时会稍微有点麻烦,没有pickle那么方便。

a.json普通对象序列化

#!/usr/bin/envpython3#coding=utf-8importjson#创建一个字典对象和一个浮点数对象d=dict(one=1,two=2,three=3)f=3.14print(type(d))#<class'dict'>print(type(f))#<class'float'>#普通对象的序列化与pickle相同nd=json.dumps(d)nf=json.dumps(f)#转换后所有对象都变成了字符串类型<class'str'>print(type(nd))print(type(nf))print(nd)#"{"three":3,"two":2,"one":1}"print(nf)#"3.14"#还原数据nd=json.loads(nd)nf=json.loads(nf)print(type(nd))#<class'dict'>print(type(nf))#<class'float'>#将d对象序列化后储存到testfile文件中withopen("testfile","w")asf1:json.dump(d,f1)#从testfile文件中读取数据并还原withopen("testfile","r")asf1:y=json.load(f1)print(type(y))#<class'dict'>

b.json类序列化

使用json序列化类会稍显复杂,因为json的dump方法不知道如何将一个类转换成字符串,需要我们自己指定一个转换函数,请看下面的实例:

#!/usr/bin/envpython3#coding=utf-8importjsonclassA(object):def__init__(self,name="py",website="python"):self.name=nameself.website=website#初始化一个类实例a=A()#创建一个函数,将类A中的对象和数据转换成字典的形式返回defclassA2dict(c):return{"name":c.name,"website":c.website}#将a使用json序列化,参数default告诉python解释器,将前面的对象a传递给后面的classA2dict函数处理,#classA2dict函数会返回一个字典类型,这个类型中包含了实例a中所有对象和数据的"键值对",#然后dumps函数将这个返回的字典类型序列化成字符串类型x=json.dumps(a,default=classA2dict)#如果想偷懒不写classA2dict函数,有一种简便方法,使用匿名函数,并且调用基类的__dict__函数,#这个函数会完成和classA2dict函数相同的功能,即将一个类的所有属性转换成字典"键值对"的形式#x=json.dumps(a,default=lambdaobj:obj.__dict__)print(type(x))#<class'str'>print(x)#"{"website":"python","name":"py"}"#字典类型转换成类返回defdict2classA(d):returnA(d["name"],d["website"])#将json序列后的数据还原成类,object_hook参数将x转换成字典类型,并传递给dict2classA函数处理,#dict2classA函数会读取这个字典中的每个键,将值传入A类进行初始化,返回一个类对象x=json.loads(x,object_hook=dict2classA)print(type(x))#<class'__main__.A'>print(x.website)#将序列化的类写入文件testfile中withopen("testfile","w")asf1:json.dump(a,f1,default=classA2dict)#读取testfile中的数据还原withopen("testfile","r")asf2:y=json.load(f2,object_hook=dict2classA)print(y.name)

众多python培训视频,尽在python学习网,欢迎在线学习!

本文链接地址:https://www.jiuchutong.com/zhishi/303694.html 转载请保留说明!

上一篇:vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)(vue新手教程)

下一篇:python类方法如何定义(python类 方法)

  • 剪映蒙版在哪里(剪映的蒙版在哪里)

    剪映蒙版在哪里(剪映的蒙版在哪里)

  • 苹果手机怎么复制文字(苹果手机怎么复制门禁)

    苹果手机怎么复制文字(苹果手机怎么复制门禁)

  • 申请注销抖音要几天(抖音注销账号需要满足的条件)

    申请注销抖音要几天(抖音注销账号需要满足的条件)

  • 网线长度会影响网速吗(网线长度影响延迟吗)

    网线长度会影响网速吗(网线长度影响延迟吗)

  • jsnalooa是什么型号(js nan是什么类型)

    jsnalooa是什么型号(js nan是什么类型)

  • 参与拼单和发起拼单有什么区别(发起拼单 参与拼单)

    参与拼单和发起拼单有什么区别(发起拼单 参与拼单)

  • 打印机打出来字模糊是什么问题(打印机打出来字有重影是怎么回事)

    打印机打出来字模糊是什么问题(打印机打出来字有重影是怎么回事)

  • airpods蓝牙连不上(airpods蓝牙连不上 找不到耳机怎么办)

    airpods蓝牙连不上(airpods蓝牙连不上 找不到耳机怎么办)

  • 为什么软件下载后不在手机上显示(为什么软件下载到d盘,c盘内存减少了呢)

    为什么软件下载后不在手机上显示(为什么软件下载到d盘,c盘内存减少了呢)

  • 陌陌互相关注不能视频(陌陌互相关注不显示距离)

    陌陌互相关注不能视频(陌陌互相关注不显示距离)

  • 电脑一键锁屏快捷键(怎么一健锁屏电脑)

    电脑一键锁屏快捷键(怎么一健锁屏电脑)

  • 主板的芯片组由什么组成(主板芯片组由什么芯片和什么芯片组成)

    主板的芯片组由什么组成(主板芯片组由什么芯片和什么芯片组成)

  • nova6与nova6se的区别(nova6跟nova6se)

    nova6与nova6se的区别(nova6跟nova6se)

  • 域名最大长度(域名最大长度怎么算)

    域名最大长度(域名最大长度怎么算)

  • 优酷快进震动怎么取消(优酷快进震动是怎么回事)

    优酷快进震动怎么取消(优酷快进震动是怎么回事)

  • 打开双4g有什么用(打开双4g会不会更耗电)

    打开双4g有什么用(打开双4g会不会更耗电)

  • 抖音怎样对嘴形唱歌(拍抖音怎么对嘴型还能编辑字幕)

    抖音怎样对嘴形唱歌(拍抖音怎么对嘴型还能编辑字幕)

  • 荣耀9x怎么调返回键(荣耀9x怎么调返回键位置)

    荣耀9x怎么调返回键(荣耀9x怎么调返回键位置)

  • 华为p20哪一年上市的(华为p20手机哪年上市)

    华为p20哪一年上市的(华为p20手机哪年上市)

  • 美团砍价返现怎么领取(美团 返现)

    美团砍价返现怎么领取(美团 返现)

  • qq音乐最多几个人登录(qq音乐最多几个人登录一个账号)

    qq音乐最多几个人登录(qq音乐最多几个人登录一个账号)

  • 如何找到自己的私密视频(如何找到自己的优势和天赋)

    如何找到自己的私密视频(如何找到自己的优势和天赋)

  • 照片过期怎么恢复(照片过期是什么意思)

    照片过期怎么恢复(照片过期是什么意思)

  • 腾讯大王卡预存款咋花(腾讯大王卡预存多少钱)

    腾讯大王卡预存款咋花(腾讯大王卡预存多少钱)

  • Mac App store出现未知错误怎么办?Mac市场错误解决(mac app store一直转圈圈)

    Mac App store出现未知错误怎么办?Mac市场错误解决(mac app store一直转圈圈)

  • internet.exe是什么病毒吗 internet进程信息查询(贴吧热门评论)

    internet.exe是什么病毒吗 internet进程信息查询(贴吧热门评论)

  • npm install 的 --save 选项是什么?

    npm install 的 --save 选项是什么?

  • 第5章 循环和表达式(循环表是线性表吗)

    第5章 循环和表达式(循环表是线性表吗)

  • OK源码中国免费下载对于某些主题需要安装Swoole Loader扩展PHP-7.2,PHP-7.3,PHP-7.4,PHP-8.0,PHP-8.1(okhttp3源码)

    OK源码中国免费下载对于某些主题需要安装Swoole Loader扩展PHP-7.2,PHP-7.3,PHP-7.4,PHP-8.0,PHP-8.1(okhttp3源码)

  • 海关完税凭证是交给海关么
  • 印花税的申报依据是什么
  • 同一控制下的长期股权投资入账成本
  • 财产租赁合同印花税计税依据含税吗
  • 公司注册后一直没有营业怎么办
  • 税务开票系统如何导入客户信息
  • 开了负数发票增值税申报表怎么填
  • 专票手工认证
  • 在建工程在现金流量表中
  • 研发折旧会计分录
  • 发工资四舍五入可以吗
  • 软件著作权如何入账
  • 纳税人登记为一般纳税人后一律不得转为小规模纳税
  • 哪些业务不需要进行平行记账
  • 个贷系统平账专户还款怎么做分录
  • 固定资产折旧结束后怎样做账
  • 捐赠所得税视同销售怎么处理
  • 金融企业贷款利息的账务处理
  • 中国电信服务
  • 预收销货款属于负债吗
  • 公司年检需要什么资料
  • 公允出资税务处理怎么做?
  • 所有者权是否益包括未交出资吗?
  • 开给销货方红字信息表如何做账?
  • 职工教育经费是工资总额的多少
  • mac废纸篓立即删除和清倒
  • 预缴附加税款会退税吗
  • 购买土地前期费用怎么入账
  • 进口小汽车消费税率
  • 工程结算书和竣工结算书
  • 最小的3g无线路由器型号
  • 弥补以前年度亏损最多几年
  • 低值易耗品现在还用吗
  • 关于减肥的好方法
  • 我想看阿尔伯塔
  • 房产税和城镇土地使用税需要计提吗
  • 保姆级官方yolov7的训练自己的数据集以及项目部署
  • 资金平衡表的编制方法
  • es6面试题promise
  • php7匿名函数
  • 厂房没租出去要交税吗
  • 帝国cms使用手册
  • 本月无开票企业怎么报税
  • 累计折旧当月增加当月减少
  • mysql入门很简单
  • php出现乱码
  • 不开增值税发票的销售收入报税操作流程是?
  • 库存现金怎么算
  • sqlserver修改数据库密码
  • 跨年度少计摊销怎么做账
  • 所得税汇算清缴怎么操作
  • 内含报酬率的计算公式Npv
  • 分公司挣的钱归谁所有
  • 上年度亏损,本年要交所得税吗
  • 暂估入库的库存商品转成本吗
  • 简易办法征收增值税有几种情况
  • 什么是限制性股票激励
  • 联营公司是关联方吗
  • 公用事业费属于什么会计科目
  • 如何学会计做账视频
  • centos7怎么关闭端口
  • Windows Server 2008如何改动服务器名称与管理员密码?
  • u盘启动盘进入pe系统
  • 电脑win 8系统
  • linux文本处理实验报告
  • .ctc文件
  • windows取消隐藏文件夹
  • 盗版win7升级win10
  • 电脑升级到win11会卡吗
  • win8 任务栏
  • OpenGl的glMatrixMode()函数理解
  • 详解Javascript ES6中的箭头函数(Arrow Functions)
  • js传参数有长度限制
  • jquery返回顶部
  • Node.js中的construct构造函数
  • android开源库
  • 出售废铁的会计分录
  • 浙江税务网上开票流程图
  • 工会经费填错了怎么办
  • 怎么看扣税明细
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设