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

  • x80怎么开dc(x80怎么开dc调光)

    x80怎么开dc(x80怎么开dc调光)

  • 高德地图怎么设置家的位置(高德地图怎么设置语音播报声音)

    高德地图怎么设置家的位置(高德地图怎么设置语音播报声音)

  • 新手第一次拍抖音怎么操作(新手第一次拍抖音的说说)

    新手第一次拍抖音怎么操作(新手第一次拍抖音的说说)

  • 苹果11是单卡吗(苹果11只有一个卡槽怎么双卡双待)

    苹果11是单卡吗(苹果11只有一个卡槽怎么双卡双待)

  • 华为智慧能力是什么(华为智慧能力是什么功能)

    华为智慧能力是什么(华为智慧能力是什么功能)

  • 抖音扫一扫彩蛋是什么(2021年抖音彩蛋是什么东西)

    抖音扫一扫彩蛋是什么(2021年抖音彩蛋是什么东西)

  • iphone可以连接鼠标吗(苹果能连鼠标吗)

    iphone可以连接鼠标吗(苹果能连鼠标吗)

  • nova7耳机插孔在哪里(华为nova7耳机插孔)

    nova7耳机插孔在哪里(华为nova7耳机插孔)

  • 误触光猫wps按键(移动光猫按了wps键就没网了)

    误触光猫wps按键(移动光猫按了wps键就没网了)

  • vivo手机怎么传数据到新手机(vivo手机怎么传照片到电脑)

    vivo手机怎么传数据到新手机(vivo手机怎么传照片到电脑)

  • 怎么发没有图片的朋友圈(怎么发没有图片的文字)

    怎么发没有图片的朋友圈(怎么发没有图片的文字)

  • 3c放电是什么意思(3c放电与5c放电的区别)

    3c放电是什么意思(3c放电与5c放电的区别)

  • kindle七天试用后必须续费吗(kindle试用期过了之后之前借阅的能看不)

    kindle七天试用后必须续费吗(kindle试用期过了之后之前借阅的能看不)

  • 华为mate20pro像素多少万(华为mate20Pro像素设置)

    华为mate20pro像素多少万(华为mate20Pro像素设置)

  • 视频vue如何修改@字幕(vue保存的视频怎么改封面)

    视频vue如何修改@字幕(vue保存的视频怎么改封面)

  • 华为p20振动怎么调大小(华为p20pro震动)

    华为p20振动怎么调大小(华为p20pro震动)

  • 三星s10支持几瓦无线充电(三星s10支持多少瓦)

    三星s10支持几瓦无线充电(三星s10支持多少瓦)

  • 中秋活动的意义(中秋活动目的内容)

    中秋活动的意义(中秋活动目的内容)

  • 苹果手机怎么截长图(苹果手机怎么截图全屏长图)

    苹果手机怎么截长图(苹果手机怎么截图全屏长图)

  • 红米k20屏幕长宽比(红米k20屏幕长宽高)

    红米k20屏幕长宽比(红米k20屏幕长宽高)

  • 手机服务器怎么设置(手机服务器怎么连接)

    手机服务器怎么设置(手机服务器怎么连接)

  • 韩剧TV怎么投屏(韩剧TV怎么投屏小米电视)

    韩剧TV怎么投屏(韩剧TV怎么投屏小米电视)

  • 荣耀coral10什么型号(荣耀十col-al10)

    荣耀coral10什么型号(荣耀十col-al10)

  • Windows10 20H2资源管理器总是崩溃重启怎么办(win10资源管理器在哪里找)

    Windows10 20H2资源管理器总是崩溃重启怎么办(win10资源管理器在哪里找)

  • 卢塞恩老城,瑞士 (© Xantana/Getty Images)(卢塞恩小镇瑞士)

    卢塞恩老城,瑞士 (© Xantana/Getty Images)(卢塞恩小镇瑞士)

  • 所得税报表的营业成本
  • 购买免税产品的app
  • 支持疫情防控捐赠语言
  • 流动资产周转天数下降说明什么
  • 开诊所会计如何做账
  • 用于员工福利的会计分录
  • 收到货款发货了没开发票怎么入账
  • 小规模纳税人应交增值税明细科目
  • 预付卡发票可以报销吗?
  • 施工劳务企业要交增值税吗
  • 加盟要给加盟费
  • 坏账准备的账务处理4步
  • 自产货物用于本企业在建工程交增值税不
  • 在企业所得税中增值税可以扣除吗
  • 个人开技术服务费税率是多少
  • 应交税费进项税额属于什么科目借贷方向
  • 员工报销增值税
  • 收到分包工程发票怎么做分录
  • 个人贷款打入公司账户
  • 单位购置汽车如何入账
  • 哪些罚款不能进行所得税税前扣除?
  • 认缴制下实收资本如何缴纳印花税
  • 非居民企业间接转让股权案例
  • 专票信息内容
  • 银行代扣印花税
  • 支付境外个人佣金
  • 待处理财产损益计入资产负债表哪里
  • 个税按工资薪金未按时申报的处罚规定
  • 未缴少缴税款追征期
  • 个人业务费是什么
  • linux CentOS WEB服务器分区方案
  • 苹果静音模式siri
  • 季报根据什么申报
  • 购货款先到支付后付款
  • 应收款减少怎么做账
  • 销售返利的形式有哪些
  • 购车人丢失发票怎么查
  • 长期借款科目核算方法
  • 委托加工不提供原材料会计分录
  • 专家评审费可以由中标人支付吗
  • javascript移动鼠标
  • 运输中合理损耗计入存货成本吗
  • transform模块
  • php中global
  • 有合同没有发票怎么入账
  • python字典添加数据
  • php 操作mongodb
  • 动态sql怎么执行
  • 用友t3系统功能怎么用
  • 破产企业资产拍卖后,管理人仅办理产权登记未交付房屋
  • 交易性金融资产是什么意思
  • 中小企业所得税优惠
  • 工程项目劳务分包招投标要多久
  • 年终奖能算在工资里吗
  • 购入啤酒会计分录
  • 金融服务银行
  • 佣金如何做账分录
  • 所得税预缴多了可以不退税嘛
  • 小规模纳税人购进税控收款机
  • 金蝶美金账户怎么删除
  • 房产税什么时候开始征收2023
  • 社会医疗保险机构名词解释汇总
  • 苹果mac怎么清理缓存
  • 通过注册表删除脱机打印机
  • windows 10如何使用
  • XP IIS5.1 + PHP 5.2.1 + MySQL 5.0.37 + Zend 3.2.6 + phpMyAdmin-2.10.0.2环境配置
  • win10系统无法安装到gpt分区
  • js内存泄漏的原因及解决办法
  • jquery日期组件
  • pcs可以使用什么在任何地方以各种速率与网络保持联络
  • jquery图片自动滚动
  • android重写方法
  • Python使用QQ邮箱发送Email的方法实例
  • javascript高级编程
  • Android---41---Service简介
  • android 开发 教程
  • 利用python中的运算符可以编程解决你身边的哪些问题
  • Python注释详解
  • 税务部门公务员报考条件
  • 广东省广州市国家安全局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设