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

Posted kaoa000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()返回的是<shelve.DbfilenameShelf object at 0x0000000002128390>,类似字典,可以使用get()获取对应键的值。

四、xml

 一个xml文件

遍历xml

 修改

删除

 创建

 

以上是关于Python入门自学进阶——4--序列化和结构化数据的主要内容,如果未能解决你的问题,请参考以下文章

Python入门自学进阶-Web框架——17Django实现评论树形结构Model操作

Python入门自学进阶-Web框架——20Django其他相关知识2

Python入门自学进阶-Web框架——22DjangoAdmin项目应用-定制页面

Python入门自学进阶-Web框架——20Django其他相关知识2

Python入门自学进阶-Web框架——4HttpRequest和HttpResponse及模板

Python入门自学进阶-Web框架——9Django进阶-认识COOKIE和SESSION