Alex_XT的博客

Kevin-XT

Python序列化与反序列化

简介

序列化:将Python里的基本类型如字典、列表、数组等序列化为字符串
反序列化:将字符串反序列化为Python里的基本类型如字典、列表等
常用:

  1. json
  2. pickle

json

序列化

import json

dic = {'Name':'Alex'}
result = json.dumps(dic)
print(dic,type(dic))
print(result,type(result))

这里写图片描述

反序列化

import json

s = '{"Name":"Alex"}'
print(s,type(s))
ret = json.loads(s)
print(ret,type(ret))

这里写图片描述

相互转换

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=杭州')
r.encoding = 'utf-8'
print(r.text)
print()

dic = json.loads(r.text)
print(dic,type(dic))

这里写图片描述

dump 与 load

dump 的功能,将序列化的内容写入文件:

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=杭州')
r.encoding = 'utf-8'
print(r.text)
print()

dic = json.loads(r.text)
print(dic,type(dic))

json.dump(dic,open('db','w',encoding='utf-8'))#将序列化的内容写入文件

这里写图片描述

load 的功能,将文件读入,反序列化:

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=杭州')
r.encoding = 'utf-8'
print(r.text)
print()

dic = json.loads(r.text)
print(dic,type(dic))

ret = json.load(open('db','r',encoding='utf-8'))#将读入文件,反序列化为Python类型数据
print(ret)

这里写图片描述

优势

跨语言操作,基于字符串类型,适用范围广。

劣势

只有基础的几种类型:

+-------------------+---------------+
| Python | JSON |
+=====+=+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+

pickle

pickle只能Python用,其他语言不能用,同样有dumps、loads,但是编码格式只有Python读得懂。但是,如果写了个类class,用json的dumps时会失败,因为json试用范围为以上几种。

序列化

import pickle
list = [1,2,3,4]
ret = pickle.dumps(list)
print(ret)
print(type(ret))

这里写图片描述

反序列化

new_list = pickle.loads(ret)
print(new_list)

这里写图片描述

dump 与 load

dump 的功能,将序列化的字节byte内容写入文件:

import pickle

list = [1,2,3,4]
pickle.dump(list,open('db','wb'))

这里写图片描述
load 的功能,将文件读入,反序列化:

import pickle


list = pickle.load(open('db','rb'))
print(list)

这里写图片描述

优势

对所有类型,特别是复杂类型进行序列化操作,像面向对象的类。

劣势

仅适用于Python语言的应用,如Python游戏的读档、存档操作。Python版本间反序列化有问题。

posted @ 2017-09-17 10:05  suntim  阅读(243)  评论(0)    收藏  举报