网络编程
位置:首页>> 网络编程>> Python编程>> 关于python的对象序列化介绍

关于python的对象序列化介绍

作者:大家好,我今天叫傻瓜  发布时间:2023-07-27 05:02:31 

标签:python,对象,序列化

对象:是抽象的概念 如列表 元组 字典 集合 皆为对象

序列化:一种方法。目的:把对象存储在磁盘上(即,将对象转换为字节数据/字符数据)。

这一过程我们借助序列化这一方法实现。

为什么需要序列化和反序列化这一操作呢?

1.便于存储。序列化过程将文本信息转变为二进制数据流。信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据。在Python程序运行中得到了一些字符串、列表、字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。

2.便于传输。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把這个对象转换为字节序列,在能在网络上传输;接收方则需要把字节序列在恢复为对象。

两个模块实现序列化

1.pickle模块

pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

pickle模块中的四个方法:dumps dump loads  load

#dumps将对象序列化为字节数据
>>> import pickle
>>> ls = [1,2,3]
>>> data = pickle.dumps(ls)
>>> data
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
>>> f=open("a.txt",mode="wb")
>>> f.write(data)
22
>>> f.close()

>>> f=open("a.txt",mode="rb")
>>> f.read()
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
>>> f.close()
#dump将对象序列化为字节数据并且保存到file文件中
>>> ls=[2,3,4]
>>> pickle.dump(ls,open("a.txt",mode="wb"))
>>> f=open("a.txt",mode="rb")
>>> f.read()
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x02K\x03K\x04e.'

#loads将字节数据反序列化为对象
>>> f =open("a.txt","rb")
>>> show = f.read()
>>> show
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.'
>>> show=pickle.loads(show)
>>> show
[1, 2, 3, 4, 5]
>>> f.close()
#load将file中的字节数据反序列化为对象
>>> pickle.load(open("a.txt","rb"))
[1, 2, 3, 4, 5]

2.json模块

json模块是将对象序列化为字符数据,json模块一样有dumps dump loads  load方法,注意:json模块一般是用来序列化字典对象 

#dumps方法
>>> import json
>>> d={"usename":"zhangsan","age":17}
>>> json.dumps(d)
'{"usename": "zhangsan", "age": 17}'
>>> s=json.dumps(d)
>>> f=open("a.txt","wt")
>>> f.write(s)
34
>>> f.close()

#loads方法
>>> f=open("a.txt","rt")
>>> ss = f.read()
>>> ss
'{"usename": "zhangsan", "age": 17}'
>>> json.loads(ss)
{'usename': 'zhangsan', 'age': 17}
>>> dd = json.loads(ss)
>>> dd
{'usename': 'zhangsan', 'age': 17}
>>> f.close()

来源:https://blog.csdn.net/weixin_55739782/article/details/122589142

0
投稿

猜你喜欢

  • 第一种:获取不带后缀的文件名,直接上代码:就是直接用basename()函数就可以返回路径中的文件名部分,其语法是“basename(pat
  • 模糊数据库指能够处理模糊数据的数据库。一般的数据库都是以二直逻辑和精确的数据工具为基础的,不能表示许多模糊不清的事情。随着模糊数学理论体系的
  • 本文实例讲述了PHP判断是否微信访问的方法。分享给大家供大家参考,具体如下:在开发中有时需要禁止或者仅允许微信浏览器进行访问,则此时就需要对
  • 如果在 Access 数据库中删除数据或对象,或者在 Access 项目中删除对象,Access 数据库或 Access 项目可能会产生碎片
  • 【摘 要】 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多
  • 作者: Terrance译者:Sheneyan(子乌)时间:2010.2.6英文原文:13 Useful WordPress SQL Que
  • 平面设计 常用尺寸 三折页广告 标准尺寸: (A4)210mm x 285mm普通宣传册 标准尺寸: (A4)210mm x 285mm文件
  • 在安装SQL Server 2000 ,安装进程自动地为“BUILTIN\Administrators&rdqu
  • 问题:这里只解决一个问题,到底什么是Access?设计一个数据库管理系统,用access在access里面设计好表,查询,然后再用vb做窗体
  • 摘要global 标志实际上是为了提示 python 解释器,表明被其修饰的变量是全局变量。这样解释器就可以从当前空间 (curr
  • 一、什么要备份数据库 ?在现实IT世界里,我们使用的服务器硬件可能因为使用时间过长,而发生故障;Windows系列服务器有可能蓝屏或者感染病
  • 文档介绍利用python写“猜数字”,“猜词语”,“谁是卧底”这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表
  • 一个网站能切换不同的CSS风格大家应该都了解,像众所周知的腾讯在今年改版时也增加了切换皮肤的功能。根据时间自动调整站点风格是不错的想法,这种
  • 一 前言pandas学到分组迭代,那么基础的pandas系列就学的差不多了,自我感觉不错,知识追寻者用pandas处理过一些数据,蛮好用的;
  • 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应
  • 编写兼容IE和FireFox的脚本确定的件很烦人的事,今日又经历了一次。一、正式表达式问题试图用以下表达式提取中括号“]”后面的内容,连接调
  • 假如页面上有很多条记录,很多情况下,对这些信息按照字母表降序排序会比传统的升序排序显示效率更高。采用你熟悉的ORDER BY 子句,你可以很
  • 通过学习ASP明明白白你的If语句流程。If condition Then    [statements1]E
  • 在过去的十年中,MySQL已经成为广受欢迎的数据库,而WordPress博客使用的是MySQL数据库,虽然使用插件可以解决一些问题,但是实现
  • 目前绝大多数手机都支持WAP 2.0。WAP 2.0的页面设计具有更好的视觉效果,更接近网页。不过由于手机千差万别,手机浏览器的能力也各不相
手机版 网络编程 asp之家 www.aspxhome.com