python之模块Ⅱ
2020-12-13 04:06
-
定义:将一个数据类型结构(list,dict...)转化成一个特殊的序列(特殊的字符串)的过程。
? 在文件存储和文件传输时有时会遇到,将原数据结构转化为str()存储在文件,或转化为bytes通过网络传输后,在读取文件或接收到文件后无法转换为原数据结构。通过序列化模块可将原数据类型转化为一种特殊的字符串,这个字符串可以与任何的数据结构相互转换。
-
序列化模块的分类
? 序列化模块可将一种数据结构转化为特殊的序列(字符串、bytes)并且还可以转换回去。目前序列化模块有三种:json模块,pickle模块,shevle模块
-
json序列化
? 是所有语言公认的最常用的一种序列,但是支持的python数据结构有限
可分为两对四个方法:
-
dumps,loads主要用于网络传输,也可以用于文件的存取
import json dic = {'username': '王大锤', 'password': 123,'status': False} ret = json.dumps(dic)#序列化:将一个字典转换成一个字符串 print(ret,type(ret)) #{"username": "\u738b\u5927\u9524", "password": 123, "status": false}
#注意,json转换完的字符串类型的字典中的字符串是由""表示的 ret_dict = json.loads(ret)#反序列化:将一个字符串格式的字典转换成一个字典 print(ret_dict) #{'username': '王大锤', 'password': 123, 'status': False} #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 可传递参数:
dic = {'username': '王大锤', 'password': 123,'status': False} ret = json.dumps(dic,ensure_ascii=False,sort_keys=True) print(ret,type(ret)) #{"password": 123, "status": false, "username": "王大锤"}
? 其他参数说明:ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。 separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。 sort_keys:将数据根据keys的值进行排序。
存取文件:
import json dic = {'username': '王大锤', 'password': 123,'status': False} s_dict = json.dumps(dic) with open('jsonlx.json',encoding='utf-8',mode='w') as f1: f1.write(s_dict) with open('jsonlx.json',encoding='utf-8') as f2: content = f2.read() print(json.loads(content))
-
dump,load用于文件存取
import json f = open('json_file.json','w') dic = {'k1':'v1','k2':'v2','k3':'v3'} json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 f.close() # json文件也是文件,就是专门存储json字符串的文件。 f = open('json_file.json') dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 f.close() print(type(dic2),dic2)
-
将多个数据存储到文件中
import json dic1 = {'username': '王大锤', 'password': 123,'status': False} dic2 = {'username': 'abc', 'password': 123,'status': False} dic3 = {'username': 'ly', 'password': 123,'status': False} with open('jsonmore.json',encoding='utf-8',mode='a') as f1: f1.write(f'{json.dumps(dic1)}\n{json.dumps(dic2)}\n{json.dumps(dic3)}') with open('jsonmore.json',encoding='utf-8') as f1: for line in f1: ret = json.loads(line) print(ret,type(ret))
-
-
pickle序列化
-
dumps,loads只能用于网络传输
import pickle l1 = ['wusir', '太白', '小黑', 666] ret = pickle.dumps(l1) print(ret) #b'\x80\x03]q\x00(X\x06\x00\x00\x00\xe5\xb0\x8f\xe9\xbb\x91q\x01M\x9a\x02e.' l2 = pickle.loads(ret) print(l2,type(l2)) ['小黑', 666]
-
dump,load只能用于文件存取
import pickle l1 = ['wusir', '太白', '小黑', 666] with open('pickle练习.pickle',mode='wb') as f1: pickle.dump(l1,f1) with open('pickle练习.pickle', mode='rb') as f1: ret = pickle.load(f1) print(ret,type(ret))
-
多个数据写入
# 多个数据写入文件 l1 = ['wusir', '太白', '小黑1', 666] l2 = ['wusir', '太白', '小黑2', 666] l3 = ['wusir', '太白', '小黑3', 666] with open('pickle练习1.pickle',mode='wb') as f1: pickle.dump(l1,f1) pickle.dump(l2,f1) pickle.dump(l3,f1) with open('pickle练习1.pickle', mode='rb') as f1: ret1 = pickle.load(f1) ret2 = pickle.load(f1) ret3 = pickle.load(f1) print(ret1,ret2,ret3)
-
-
上一篇:JavaSE复习4
下一篇:JDK安装(win7系统)