python 序列化 pickle

序列化:把变量从内存中变为可储存或者可传输的过程叫做序列化,序列化之后就可将已序列化过的数据写入磁盘,或者通过网络传输到别的机器上。

python中使用pickle进行序列化

1.dumps()

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
dump()函数内置了很多参数,这些参数的用法一一介绍。

(1)dump(obj)

obj参数是必填项,就是需要被序列化的参数。
例如:

>>> s=[1,'zaq',['python','learing'],{'time':30,'asf':'y'}]
>>> print(s)
[1, 'zaq', ['python', 'learing'], {'time': 30, 'asf': 'y'}]
>>> import json
>>> print(pickle.dumps(s))
b'\x80\x03]q\x00(K\x01X\x03\x00\x00\x00zaqq\x01]q\x02(X\x06\x00\x00\x00pythonq\x03X\x07\x00\x00\x00learingq\x04e}q\x05(X\x04\x00\x00\x00timeq\x06K\x1eX\x03\x00\x00\x00asfq\x07X\x01\x00\x00\x00yq\x08ue.'

这里就是将原来的列表s,变成了一个可用于存储和传输的bytes

(2)dump(obj,f)

后将序列后的s放到文件中去(用于存储):

f=open('dump.txt','wb')#因为序列化后的s是一个字节,所以要用wb的方式写入
pickle.dump(s,f)
 f.close()#使用完文件一定要让它关上
 ```
 打开dump文件:
 ```
 €]q (KX   zaqq]q(X   pythonqX   learingqe}q(X   timeqKX   asfqX   yque.€]q (KX   zaqq]q(X   pythonqX   learingqe}q(X   timeqKX   asfqX   yque.€]q (KX   zaqq]q(X   pythonqX   learingqe}q(X   timeqKX   asfqX   yque.€]q (KX   zaqq]q(X   pythonqX   learingqe}q(X   timeqKX   asfqX   yque.
 ```
 显示的的是python 保存的对象内部信息...反正看不懂
##   json-python
 为了更加方便的传输和保存,一般数据都是用json 表示。因为json 传输的是一个字符串,更快更方便。
 对于json和python之间的数据对象对比如下:
-  python-json

![image](http://images.cnblogs.com/cnblogs_com/coser/201112/201112141621136287.png)

-  json-python

![image](http://images.cnblogs.com/cnblogs_com/coser/201112/201112141621147225.png)

例如:

import json
s=[1,’zaq’,[‘python’,’learing’],{‘time’:(1,30),’asf’:’y’}]
print(json.dumps(s))
[1, “zaq”, [“python”, “learing”], {“time”: [1, 30], “asf”: “y”}]
print(type(json.dumps(s)))

其中元组就变成了列表,但是序列化之后的s就是字符串

将json转化为python:`json,loads()`
语法:`json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])`

例子:

import json
txt_json=’[“a”,1,”s”,2]’
json.loads(txt_json)
[‘a’, 1, ‘s’, 2]

(3)dump(obj, fp, *, skipkeys=False)

skipkeys可以设置被序列化的字典中的key 不用是str类型。
例如:

>>> s={'name':"zaq",'time':30,('who',30):'y'}
>>> json.dumps(s)              #不使用skipkeys参数,就会报错
Traceback (most recent call last):
  File "<input>", line 1, in <module>
>>> json.dumps(s,skipkeys=True)
'{"time": 30, "name": "zaq"}'

(4)dump(obj,indent=None)

indent用来加缩进值

>>> d1=json.dumps(s,skipkeys=True,indent=4)
>>> print(d1)
{
    "time": 30,
    "name": "zaq"
}

但是看到('who',30):'y'这一部分没有输出,估计是skipkeys=True的原因。

(5)dump(obj, sort_keys=False)

sore_keys是保证字典输出按照原有顺序来的依靠。

>>> s={'time': 30, 'who': 'y', 'name': 'zaq'}
>>> d1=json.dumps(s,sort_keys=True)
>>> print(d1)
{"name": "zaq", "time": 30, "who": "y"}

2.反序列化load()

之前往文件里面写了一点东西,现在把它拿出来

>>> f=open('dump.txt','rb')
>>> d=pickle.load(f)
>>> f.close()
>>> d
[1, 'zaq', ['python', 'learing'], {'time': 30, 'asf': 'y'}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值