JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
# json序列化 import json,time user={'name':'egon','age':18,'nb':True} with open('user.json','w',encoding='utf-8') as f: f.write(json.dumps(user)) # dumps students=['alex','egon','wxx','yxx'] json.dump(students,open('students.json','w',encoding='utf-8')) # dump
dic1 = {'type':'dic1','username':'loleina','age':16}
json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_ascii=True ) # dump
# 实际上就是对函数的参数的一个理解过程,下面列出几个常用的参数:
sort_keys:将数据根据keys的值进行排序。
indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(',',':');这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
encoding:默认是UTF-8,设置json数据的编码方式。
ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成
True,则会跳过这类key
# pickle序列化 import pickle s={1,2,3} with open('s.pkl','wb') as f: f.write(pickle.dumps(s)) # dumps pickle.dump(s,open('s.pkl','wb')) # dump #json反序列化 import json with open('user.json','r',encoding='utf-8') as f: user=json.loads(f.read()) #json.loads print(user['name']) user=json.load(open('user.json','r',encoding='utf-8')) #json.load print(user['age']) #pickle反序列化 import pickle with open('s.pkl','rb') as f: s=pickle.loads(f.read()) #loads print(s,type(s)) s=pickle.load(open('s.pkl','rb')) #load print(s, type(s))
shelve 模块
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型
import shelve f=shelve.open('db.shl') # f['stu1']={'name':'alex1','age':38} # f['stu2']={'name':'alex2','age':28} print(f['stu1']['name']) f.close()