Python入门之模块序列化

序列化(Serialization)是什么?

  序列化将对象的状态信息转换为可以存储或传输的形式的过程;在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

  简单的可以理解,就上将内存中的变量数据转而存储到磁盘上就是序列化。反之,把变量数据从序列化的对象重新读到内存里称之为反序列化。

python中有两个可用于序列化的模块,分别是json和pickle;下面将分别介绍json和pickle用法。

  pickle是python中独有的序列化模块,所谓独有,就是指不能和其他编程语言的序列化进行交互,因为pickle将数据对象转化为bytes。

  json是序列化的一种标准通用格式,可以在各个编程语言中传递数据。就像之前的XML格式,但是json比XML更快。

 

pickle:以二进制形式存放数据

pickle模块提供了四个功能:dumps、dump、loads、load。dumps和dump都是进行序列化;而loads和load则是反序列化 

  pickle序列化数据: 

  dumps:将所传入的变量的值序列化为二进制数据,然后写入文件或者进行传输。

  dump:可以传入两个参数,一个为需要序列化的变量,另一个为需要写入的文件。

#!/usr/bin/env python3

import pickle

#需要存储的数据
info = {
    "chengd":"123",
    "xrd":"123456"
}

#以二进制方式打开文件,并将序列化后的数据直接存储到文件中
with open("/tmp/user.txt","wb") as f:
    pickle.dump(info,f)
    #或f.write(pickle.dumps(info))
执行结果:
[root@localhost 20170712]# ./pickle_write.py 
[root@localhost 20170712]# cat /tmp/user.txt 
}q(XchengdqX123qXxrdqX123456qu.            #数据已被序列化为二进制数据并存储在文件中

  pickle反序列化数据:

  loads:首先把对象从磁盘文件读到内存后,才可以用loads方法反序列化出对象

  load:load方法可以直接反序列化一个磁盘文件

#!/usr/bin/env python3

import pickle

#以二进制方式读取文件,并 反序列化文件内的数据
with open("/tmp/user.txt","rb") as f:
    data = pickle.load(f)
    #或data = pickle.loads(f.read())
print(data)
执行结果:
[root@localhost 20170712]# ./pickle_open.py 
{'chengd': '123', 'xrd': '123456'}                    #将二进制数据正常反序列化

json:以字符串形式存放数据

  Json格式介绍:http://www.cnblogs.com/SkySoot/archive/2012/04/17/2453010.html

  json中的方法和pickle中差不多,也是dumps,dump,loads,load。使用上也没有什么区别,区别在于,json中的序列化后格式为字符。

  json序列化数据:

#!/usr/bin/env python3

import json

#需要存储的数据
info = {
    "linux":"100¥",
    "python":"199¥"
}

#打开文件,并将序列化后的数据直接存储到文件中
with open("/tmp/book.txt","w") as f:
    json.dump(info,f)
    #或f.write(json.dumps(info))
执行结果:
[root@localhost 20170712]# ./json_write.py 
[root@localhost 20170712]# cat /tmp/book.txt 
{"linux": "100\uffe5", "python": "199\uffe5"}

  json反序列化数据:

#!/usr/bin/env python3

import json

with open("/tmp/book.txt","r") as f:
    data = json.load(f)
    #或data = json.loads(f.read())
print(data)
执行结果:
[root@localhost 20170712]# ./json_open.py 
{'linux': '100¥', 'python': '199¥'}

参考:http://www.cnblogs.com/MnCu8261/p/5539254.html

 

***********************************************************

 学习永远不晚。——高尔基

***********************************************************

  

posted @ 2017-07-12 23:16  chengd  阅读(345)  评论(0)    收藏  举报