json & pickle & shelve 模块

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()
原文地址:https://www.cnblogs.com/snailgirl/p/9416053.html