Python序列化(pickle和json)

Python序列化(pickle和json)

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

变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上,把变量内容从序列化的对象重新读到内存里称之为反序列化。

比较通用的标准化的有json和xml格式,可以在不同的语言之间和系统之间传递对象,python也有内置的Pickle,该格式只能用于python内部,不同的版本之间都有可能不兼容。

Pickle

Python提供两个模块来实现序列化:cPickle和pickle。这两个模块功能是一样的,区别在于cPickle是C语言写的,速度快,pickle是纯Python写的。

通过调用pickle的dumps方法,可以将把任意对象序列化成一个str,通过调用loads方法可以将str序列化成对象,dump可以直接将对象序列化写入文件中,load直接将文件中的内容反序列化成对象。

如下所示:

#dict对象
MyMsg = dict(name='ctx',age='50',add='shanghai')
#序列化成字符串
str = pickle.dumps(MyMsg) 
print  str
#直接写入文件
file = open("serialize.pickle",'wb')
pickle.dump(MyMsg,file)
file.close()
#直接将文件内容反序列化成对象
file = open("serialize.pickle",'rb')
d = pickle.load(file)
file.close()
print d

 

结果如下所示:

dp1

S'add'

p2

S'shanghai'

p3

sS'age'

p4

S'50'

p5

sS'name'

p6

S'ctx'

p7

s.

{'add':'shanghai', 'age': '50', 'name': 'ctx'}

生成文件serialize.pickle,其文本内容显示与str结果一致。

Json

Json的序列化和反序列化的格式与pickle相似,通过调用dump和load方法来完成。

分别对dict、int、str和float变量序列化为json,如下所示

import json
MyMsg = dict(name='ctx',age='50',add='shanghai')
list = [10,15,16,17]
ID = 10
HardStr = "No"
PI = 3.1415

jsonStr = json.dumps(MyMsg)
print "my msg json str:"+json.dumps(MyMsg)
print "list json str:"+json.dumps(list)
print "HartStr json str:"+json.dumps(HardStr)
print "ID json str:"+json.dumps(ID)
print  "PI json str:"+json.dumps(PI)

则结果如下:

my msg json str:{"add":"shanghai", "age": "50", "name":"ctx"}

list json str[10, 15, 16, 17]

ID json str:10

HartStr json str:"No"

PI json str:3.1415

同pickle,dump可以将序列化结果输入到文件中

 

Loads可以将json格式的字符串反序列化生成对象

Load可以将json格式的文件中的内容反序列化生成对象

例如编写一下json格式的config文件

{
  "work path":"/root",
  "complile":"clang++",
  "file":"elf",
  "count":100
}

反序列化操作如下:

file = open("config",'rb')
readOb= json.load(file)
print readOb

结果如下:

{u'count': 100, u'work path': u'/root',u'file': u'elf', u'complile': u'clang++'}

 

Json中表示的数据类型与python变量类型对应如下,在一些场合下可以将其写成配置文件写成json格式配置文件比较清晰和方便。

JSON类型

Python类型

{}

dict

[]

list

"string"

'str'或u'unicode'

1234.56

int或float

true/false

True/False

null

None

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值