您的位置:首页 > 编程语言 > Python开发

Python模块知识4:序列化Json/pickle

2018-01-01 00:00 911 查看
序列化与反序列化
序列化:把Python的基本数据类型转为字符串
反序列化:把字符串转为Python的基本数据类型

Python中用于序列化的两个模块:
json     用于【字符串】和 【python基本数据类型】 间进行转换;由于字符串是各语言通用的,json更适合跨语言;但仅支持dict、list、tuple、str、int、flost、True、False

pickle   用于【python特有的类型】 和 【python基本数据类型】间进行转换,支持任何类型,更适合所有类型的序列化,比如面向对象

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

关于json:
JSON:JavaScript 对象表示法(JavaScript Object Notation)。

JSON 是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析

案例1:json转换过程,dumps、loads;内部涉及字符串的时候一定要使用双引号,如li=["a","b"],而不是li=['a','b']import json
dic={"k1":"v1","k2":"v2"}
print('dic',dic,type(dic))
result=json.dumps(dic) # 将python基本数据类型转为字符串                 
print('result',result,type(result))
dic2=json.loads(result)#将字符串转为基本数据类型 ,                     
print('dic2',dic2,type(dic2))执行结果:



案例2:json读取并写入文件中,dump、loadimport  json
li=["a","b"]
json.dump(li,open('db','w'))#执行结果,db文件中写入li的内容
r=json.load(open('db','r'))#读文件操作
print(r,type(r))执行结果:['a', 'b'] <class 'list'>
案例3:基于天气的API获取天气相关的json
import requests
import json
r=requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京')
r.encoding='utf-8'
dic=json.loads(r.text)
print(dic)执行结果:


关于pickle的应用:

案例4:pickle的dumps和loadsimport pickle
dic={"k1":"v1","k2":"v2"}
print('dic',dic,type(dic))
result=pickle.dumps(dic) # 将python基本数据类型转为字节
print('result',result,type(result))
dic2=pickle.loads(result)#将字符串转为基本数据类型
print('dic2',dic2,type(dic2))执行结果:



案例5-1:pickle的写入文件和导出文件,类型需要加b
import pickleli=["a","b"]
pickle.dump(li,open('hh','wb'))#类型需要加b
r=pickle.load(open('hh','rb'))#读文件操作,需要加b
print(r,type(r))执行结果:



案例5-2:修改导入文件的内容import pickle
account_info={'a1':['hh',222,20],
'a2':['rr',444,40]
}
pickle.dump(account_info,open('acc.pkl','wb'))
t=pickle.load(open('acc.pkl','rb'))
print ('初次导入',t,type(t))

#修改字典中的一个值,重新存储,再次调用
account_info['a2'][1]=555
account_info['a2'][2]=50
pickle.dump(account_info,open('acc.pkl','wb'))
f=pickle.load(open('acc.pkl','rb'))
print ("修改值",f,type(f))
#添加一个新的字段
account_info['a3']=['ppp',666,60]
pickle.dump(account_info,open('acc.pkl','wb'))
y=pickle.load(open('acc.pkl','rb'))
print ("添加新的值",y,type(y))



案例5-3:对象的pickle使用



案例5-4:jupyter上使用pickle
new_data.to_pickle('C:\\data_0921.pickle')
new_data = pd.read_pickle('C:\\data_0921.pickle')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: