python——序列化

# dic={''}
# f=open('test','w')
# f.write(dic)
#这样是无法将字典写入的
#要将变量转为字符串
# dic={'1:2'}
# dic=str(dic)
# f=open('test','w')
# f.write(dic)

# f=open('test','r')
# data=f.read()
# print(data['1'])
#TypeError: string indices must be integers
#这样无法取出字典
#需要动用eval函数
# f=open('test','r')
# data=f.read()
# print(eval(data))

#序列化可以更简单的帮我们传字典
#json 掌握两种方法即可:loads与dumps
#load与dump是简化的存在
#pickle与json使用方法大致相同

#1.json
#存入
import json
dic={'name':'lin','age':'20'}
f=open('test','w')
a=json.dumps(dic)#1
#将dic进行序列化
f.write(a)#2
# 1+2=json.dump(dic,f)
f.close()
#{"name": "lin", "age": "20"}

#取出
import json
f=open('test','r')
a=f.read()#1
a=json.loads(a)#2
#1+2= a=a.load(f)
#使用load进行读取
print(a['name'])
f.close()
#lin

# def zzzi():
#     print('1')
# a=json.dumps(zzzi)
#<function zzzi at 0x000001D2451A3950> is not JSON serializable
#json无法对函数、类进行序列化
#但pickle可以

#2.pickle
import pickle
def zzzi():
    print('1')
a=pickle.dumps(zzzi)
f=open('test1','wb')
#需要改为二进制 所以用wb 不然默认ste类型无法写入
f.write(a)
f.close()
#结果是看不懂的的 而json为可视的:
#�c__main__
# zzzi
# q .

import pickle
f=open('test1','rb')
#接收时也是rb
a=f.read()
a=pickle.loads(a)
a()

#3.shelve
#shelve存储就是一种字典的模式
#存入
import shelve
f=shelve.open('test2')
f['zzzi']={'name':'lin','age':'20'}
#结果为三个文件

#取出
import shelve
f=shelve.open('test2')
a=f.get('zzzi')
print(a)
#{'name': 'lin', 'age': '20'}

#关于get

a={'name':'lin','age':'20'}
print(a['name'])
a['name']='zzzi'#也可以起到修改的作用
print(a['name'])
#=print(a,get('name'))
print(a.get('weight','100'))
#若选取建的没有可以加上

 

posted @ 2019-08-19 15:25  zzzi  阅读(184)  评论(0编辑  收藏  举报