栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python入门自学进阶——4--序列化和结构化数据

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python入门自学进阶——4--序列化和结构化数据

对于一个对象,如一个变量,从内存中保存到磁盘中一个文件中,即进行序列化,可以如下:

 一、json

JSON(Javascript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。JSON是一个序列化的对象或数组。
1. 六个构造字符:
begin-array = ws %x5B ws ; [ 左方括号
begin-object = ws %x7B ws ; { 左大括号
end-array = ws %x5D ws ; ] 右方括号
end-object = ws %x7D ws ; } 右大括号
name-separator = ws %x3A ws ; : 冒号
value-separator = ws %x2C ws ; , 逗号
2. 在这六个构造字符的前或后允许存在无意义的空白符(ws):
ws = *(%x20 /; 空间
%x09 /; 水平标签
%x0A /; 换行或换行
%x0D); 回程

值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:
    {"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}
数组是由方括号括起来的一组值构成,如:
[3, 1, 4, 1, 5, 9, 2, 6]
3.2.3 字符串与C或者Java的字符串非常相似。字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

python中有json模块。

 json.dumps()将一个对象转换为一个json格式字符串。便于序列化写入文件,json.loads()将json格式字符串转换为python对象,这里是字典。

 对于像函数这样的对象,json无法序列化:

 二、pickle

pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。 “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。pickle模块对于错误或恶意构造的数据是不安全的。对于序列化一个函数,可以使用pickle。

 

需要以字节形式写入文件,将文件的写入方式改为wb,文件中的内容:

 反序列化

 修改一下:

要注意的是,在loads()的时候,要让python能够找到对应的定义,否则会报错。也就是序列化对象 时,本模块中要有相应的定义。对于函数来说,上面的写法很怪异,感觉没什么用处,并且重复,关于对象的序列化和反序列化,感觉主要应用于类对象,一个类的实例序列化后,保存了相关数据,在另一个程序中反序列化,直接回复这个对象的一个实例,而类定义是必须的。

同时,使用Pickler实例在序列化对象的时候,它会“记住”已经被序列化的对象引用,所以对同一对象多次调用dump(obj),pickler不会“傻傻”的去多次序列化。

对于json和pickle,有dumps()、loads()和dump()、load()不同的两对函数。

 三、shelve

一个更简洁的序列化模块,只有一个open()方法:

 open()返回的是,类似字典,可以使用get()获取对应键的值。

四、xml

 一个xml文件

遍历xml

 修改

删除

 创建

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308728.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号