python的序列化和json

python的基础模块序列化

        序列化的含义:把一个对象从内存中变成可存储或传输过程称之为序列化
    序列化之后,可以把序列化后的内容写入到磁盘,或者通过网络传到别的机器上去。当然,别的机器还是使用哪个python去处理数据。反过来,把变量内容从序列化对象重新读入到内存中称之为反序列化,就是unpickling
    就和玩游戏中的存档是一样的,在玩使命召唤的时候,每过一个关卡时,都会存档,就算此时断电了,从新打开电脑时,还是可以跟以前有相同的状态去接着玩游戏。
   序列化:
import pickle
data = {'name':'Jack','gender':'man'}
p_str = pickle.dumps(data)
print p_str

   执行结果:
(dp0
S'gender'
p1
S'man'
p2
sS'name'
p3
S'Jack'
p4
s.

pickle模块提供了四个功能:dumps、dump、loads、load。

  dumps和dump都是进行序列化,而loads和load则是反序列化。


dump和dumps的区别:

dumps将所传入的变量的值序列化为一个str,然后,就可以将这个str写入磁盘或者进行传输。

而dump则更加一步到位,在dump中可以传入两个参数,一个为需要序列化的变量,另一个为需要写入的文件。


也就是dump操作的是和文件相关的。

with open("myfile",'w+') as myfile:
    pickle.dump({"name":"Jack","gender":"man"},myfile)

执行上述代码,会在当前目录下出现一个myfile文件。

with open("myfile",'r+') as myfile:
    txt = pickle.load(myfile)

print txt

这样会打印出name:Jack 。。。

load和loads的区别:

loads当我们要把对象从磁盘读到内存时,可以先把内容读到一个str,然后用loads方法反序列化出对象,也可以直接用load方法直接反序列化一个文件。


pickle可以存列表,类,字典等等。。。(基本上python上的所有对象都可以)

而json只能序列化字典,列表,集合这样的常规的对象。


Json 格式

    json是不同编程语言之间传递对象的一种标准格式,json表现出的是字符串,可以被任何语言读取,在使用上json和pickle没有太大的区别。
都是dump,dumps,load,loads 。。。




你可能感兴趣的:(python)