位置: 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类 方法)

  • 华为matebook13连不上无线网怎么办(华为matebook13连接蓝牙鼠标)

    华为matebook13连不上无线网怎么办(华为matebook13连接蓝牙鼠标)

  • 剪映如何镜像翻转(剪映 镜像翻转)

    剪映如何镜像翻转(剪映 镜像翻转)

  • 苹果x充满电能用多久时间(苹果X充满电能用多久)

    苹果x充满电能用多久时间(苹果X充满电能用多久)

  • boss直聘职位关闭是什么意思(boss直聘职位关键词怎么改才能招到人)

    boss直聘职位关闭是什么意思(boss直聘职位关键词怎么改才能招到人)

  • 苹果手机查找不可用 无法连接服务器(苹果手机查找不能用了怎么办)

    苹果手机查找不可用 无法连接服务器(苹果手机查找不能用了怎么办)

  • qq电话能回放吗(qq电话能回放吗怎么设置)

    qq电话能回放吗(qq电话能回放吗怎么设置)

  • 华为数据线有什么标志(华为数据线有什么功能)

    华为数据线有什么标志(华为数据线有什么功能)

  • 为什么抖音极速版提现不成功(为什么抖音极速版没有红包界面)

    为什么抖音极速版提现不成功(为什么抖音极速版没有红包界面)

  • 7p和8p的区别对比(7p和8p的区别对比照片)

    7p和8p的区别对比(7p和8p的区别对比照片)

  • iphone11需要贴膜吗(苹果11需要贴膜不)

    iphone11需要贴膜吗(苹果11需要贴膜不)

  • 华为手机怎样清理垃圾内存(华为手机怎样清除缓存)

    华为手机怎样清理垃圾内存(华为手机怎样清除缓存)

  • 浏览器ie是什么意思(电脑的ie浏览器是什么样子的)

    浏览器ie是什么意思(电脑的ie浏览器是什么样子的)

  • 手机wps怎么建文件夹(手机wps怎么建文档打字)

    手机wps怎么建文件夹(手机wps怎么建文档打字)

  • 抖音里面什么叫粉丝通知页(抖音里面什么叫铁粉)

    抖音里面什么叫粉丝通知页(抖音里面什么叫铁粉)

  • z5x视频聊天带美颜吗(vivoz5的微信视频美颜,对方看到是怎么的)

    z5x视频聊天带美颜吗(vivoz5的微信视频美颜,对方看到是怎么的)

  • sos紧急呼叫怎么关掉(sos紧急呼叫怎么设置oppo)

    sos紧急呼叫怎么关掉(sos紧急呼叫怎么设置oppo)

  • 怎么下载miui11(怎么下载miui开发版)

    怎么下载miui11(怎么下载miui开发版)

  • 开淘宝店怎么上传图片(开淘宝店怎么上传宝贝)

    开淘宝店怎么上传图片(开淘宝店怎么上传宝贝)

  • 24-105镜头适合拍什么(24-105镜头适合拍建筑室内吗)

    24-105镜头适合拍什么(24-105镜头适合拍建筑室内吗)

  • 爱奇艺怎么和微信解绑(爱奇艺怎么和微信不同步)

    爱奇艺怎么和微信解绑(爱奇艺怎么和微信不同步)

  • 快手号可以注销吗(快手号可以注销掉吗?)

    快手号可以注销吗(快手号可以注销掉吗?)

  • 唱吧金币可以提现吗(唱吧金币怎么用完)

    唱吧金币可以提现吗(唱吧金币怎么用完)

  • 华为取消下滑搜索设置(华为取消下滑搜索栏)

    华为取消下滑搜索设置(华为取消下滑搜索栏)

  • 微信面对面建群怎么设群主(微信面对面建群无法进入聊天)

    微信面对面建群怎么设群主(微信面对面建群无法进入聊天)

  • 虎扑如何提高声望(虎扑怎么提高声望值)

    虎扑如何提高声望(虎扑怎么提高声望值)

  • 华为应用助手有什么用(华为应用助手有什么功能)

    华为应用助手有什么用(华为应用助手有什么功能)

  • win10显示我的电脑没有个性化怎么办解决方法(win10显示我的电脑)

    win10显示我的电脑没有个性化怎么办解决方法(win10显示我的电脑)

  • win10多任务视图怎么添加在任务栏上详细方法(win10多任务视图怎么关闭)

    win10多任务视图怎么添加在任务栏上详细方法(win10多任务视图怎么关闭)

  • 本地部署element-plus文档(本地部署gpt4)

    本地部署element-plus文档(本地部署gpt4)

  • 税务局退回个税手续费会计分录
  • 哪些情况下可以无偿提供法律援助
  • 金税盘年费能全额抵扣吗
  • 筹建期间的会计分录
  • 企业增值税税负率怎么计算
  • 企业间分红是否需要缴纳企业所得税
  • 什么叫做负税
  • 申报纳税的意思
  • 营业外支出增加的原因
  • 公司公积金缴纳比例一般来说是多少?
  • 差旅费住宿专票能否抵扣
  • 其他应付款在借方资产负债表怎么填
  • 自产农产品增值税申报表填10行吗
  • 甲方代扣水电费怎么做账
  • 会计核算过程中的错误分析
  • 企业固定资产折旧当月增加当月计提吗
  • 非独立核算的分公司可以开票吗
  • 现金折让怎么做会计分录
  • 银行代付工资如何做财务处理合适?
  • 车间消耗品的会计分录
  • 公允价值变动损益属于当期损益吗
  • 17增值税发票怎么计算
  • 公积金贷款利息现在是多少
  • 1697508991
  • 外购货物评估减值要转出进项税额吗?
  • 应收款项核销的原因
  • 短期投资损失
  • 倒发票怎么倒出钱来
  • 股金属于金融产品吗
  • 采购费用应计入材料采购成本
  • 会计中的低值易耗品
  • 增值税税率简易征收
  • 怎么获取win10密钥
  • mac双系统切换键
  • 薏米红豆粥的做法视频
  • 企业所得税弥补以前年度亏损怎么算
  • 母公司收取子公司利润交增值税吗
  • stable diffusion webul
  • 营业外支出准则
  • vue运行报错
  • php数组分类
  • 快递行业规矩
  • node深入浅出pdf
  • elementui的upload组件详解
  • zip命令详解
  • emerge命令
  • 账载折旧金额填哪个数
  • 稳岗补贴钱给谁
  • 信托保障基金怎么赎回
  • 现金流量表企业所得税
  • 帝国cms自定义列表
  • 现金流量表年报期末现金余额
  • 如何理解合并报表抵消分录
  • 火车票报销抵扣比例是多少
  • 卖废品收入计入需要交税吗
  • 跨月的普通发票怎么开红字发票
  • 为什么增值税不计入成本费用
  • 冲减实收资本是什么意思
  • 银行存款会计分录需要输入哪些内容
  • 实收资本印花税属于什么税目
  • 接受捐赠可以确认为收入吗
  • 已认证抵扣增值税怎么撤回申报
  • 外购货物用于在建工程分录
  • 劳务成本如何核算
  • 流动资产周转率计算公式
  • sqlserver多表查询 索引
  • linux在服务器领域的应用状况
  • drupdate
  • 电脑c盘里windows
  • elccest.exe是间谍广告程序吗 elccest进程有什么作用
  • vista starter
  • redhat本地yum配置的基本步骤
  • 自动隐藏桌面图标
  • win8系统怎么打开运行
  • windows10禁用独立显卡
  • jquery动态创建元素
  • android保存网络图片
  • JavaScript中的this
  • 上海个人到税务局怎么开票
  • 研发材料占研发费用比例超出50%
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设