网络传输数据 字节 bytes 文件写入内容:bytes,str dic = {'name': '太白金星', 'hobby_list': ['戒烟', '烫不了头', '戒酒']} s1 = str(dic) b1 = s1.encode('utf-8') # print(b1) s2 = b1.decode('utf-8') # print(s2,type(s2)) dic1 = eval(s2) print(dic1,type(dic1)) 1 以上的eval 不安全最好不要用 现在需要一个功能:将数据 转化成可以通过网络传出的bytes 将数据(数据结构) ---> 特殊的字符串(可以用于网络传输) 序列化过程 将这个特殊的字符串 ----> 转化成原来的数据结构 反序列化过程 python给咱们提供的序列化模块 import json # json 序列化模块 是所有语言通用的一种标准(数据转化格式)。 # str int bool dict list(tuple) None import pickle # pickle 序列化模块 只是支持python语言之间的互相传输。 # python语言的所有数据类型 对象 都可以进行网络传递 # 写入文件时 可以写入多个。 import shelve # 了解 # shelve 序列化模块 只是支持python语言,与文件相关。 json 第一对方法:dumps loads 与网络传输相关 dic = {'name': "太白金星", 'hobby_list': ['戒烟', '烫不了头', '戒酒']} # print(dic) s = json.dumps(dic,ensure_ascii=False) # 序列化过程 print(s,type(s)) dic1 = json.loads(s) # 反序列化过程 print(dic1, type(dic1)) 第二对 dump load 与文件相关 dic = {'name': "太白金星", 'hobby_list': ['戒烟', '烫不了头', '戒酒']} with open('序列化.json', encoding='utf-8', mode='w') as f1: json.dump(dic,f1,ensure_ascii=False) with open('序列化.json', encoding='utf-8',) as f2: ret = json.load(f2) print(ret,type(ret)) 参数讲解: dic = {'name': "太白金星", 'hobby_list': ['戒烟', '烫不了头', '戒酒'], 'age': 18, 'money': '1个亿'} print(dic) s = json.dumps(dic,ensure_ascii=False,sort_keys=True,separators=('|',',')) # 序列化过程 sort_keys 按键排序 ensure_ascii=False 显示中文 separators=('|',',') 设置分隔符 没有意义 print(s) 讨论json 与bytes 的区别 bytes 只能操作str 用于网络传输 json 可以操作 str int bool dict list(tuple) None 用于网络传入,写入文件 通过json将多个字典写入一个文件 如果用dump load 一个文件只能写入一个数据结构 dic1 = {'name': '春哥'} dic2 = {'name': '子伍'} dic3 = {'name': '王子'} with open('多个字典.json', encoding='utf-8', mode='w') as f1: json.dump(dic1,f1) f1.write('\n') json.dump(dic2,f1) f1.write('\n') json.dump(dic3,f1) f1.write('\n') with open('多个字典.json', encoding='utf-8',) as f1: ret1 = json.load(f1) ret2 = json.load(f1) ret3 = json.load(f1) print(ret1,ret2,ret3) dic1 = {'name': '春哥'} # dic2 = {'name': '子伍'} # dic3 = {'name': '王子'} # with open('多个字典.json',encoding='utf-8',mode='w') as f1: # f1.write(json.dumps(dic1) + '\n') # f1.write(json.dumps(dic2) + '\n') # f1.write(json.dumps(dic3) + '\n') with open('多个字典.json',encoding='utf-8') as f2: # for line in f2: # print(json.loads(line)) 总结: dumps loads 用于网络传输 和 多个数据写入文件 dump load 只能用于一个数据结构写入文件 坑: dic = {1: 'alex'} ret = json.dumps(dic) print(ret) print(json.loads(ret)) # pickle import pickle dumps loads 用于网络传输 :将数据结构 ----> 转化成bytes dic = {'name': "太白金星", 'hobby_list': ['戒烟', '烫不了头', '戒酒'], 'age': 18, 'money': '1个亿'} s1 = pickle.dumps(dic) print(s1) dic2 = pickle.loads(s1) print(dic2,type(dic2)) dic = {'name': "太白金星", 'hobby_list': ['戒烟', '烫不了头', '戒酒'], 'age': 18, 'money': '1个亿'} with open('p1.pickle',mode='wb') as f1: pickle.dump(dic,f1) with open('p1.pickle',mode='rb') as f2: ret = pickle.load(f2) print(ret,type(ret)) # 利用dump load 将多个数据写入文件 dic1 = {'name': '春哥'} dic2 = {'name': '子伍'} dic3 = {'name': '王子'} # with open('p2.pickle',mode='wb') as f1: # pickle.dump(dic1,f1) # pickle.dump(dic2,f1) # pickle.dump(dic3,f1) # with open('p2.pickle',mode='rb') as f1: # ret1 = pickle.load(f1) # ret2 = pickle.load(f1) # ret3 = pickle.load(f1) # print(ret1,ret2,ret3) # def func(): # print(666) # # with open('p3.pickle',mode='wb') as f1: # # pickle.dump(func,f1) # with open('p3.pickle',mode='rb') as f1: # # ret = pickle.load(f1) # # ret() # import shelve f = shelve.open('shelve_file') f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据 f.close() 给文件写入一个字典:{'key':{'int':10, 'float':9.5, 'string':'Sample data'}} f = shelve.open('shelve_file') print(f['key']) f.close() import shelve f1 = shelve.open('shelve_file',writeback=True) print(f1['key']) f1['key']['new_value'] = 'this was not here before' f1.close() f1 = shelve.open('shelve_file') print(f1['key']) f1.close() writeback=True 如果相对shelve文件进行修改,必须要添加这个参数
09-19