四、json、pickle
一、json(传数据方便)
1.1 json
就是一种有语法规范的字符串,用来存放数据的,完成各种语言之间的数据交互
1. 就是{}与[]的组合,{}存放双列信息(类比为字典),[]存放为单列信息(类比为列表)
2. {}的key必须是字符串,且必须为 " " 包裹
3. {}与[]中支持的,类型:dict、list、int、float、bool、null、str
为什么会有很多序列化和反序列化模块?
因为程序中会出现各种的对象,如果要将这些对象持久化存储,必须先序列化
只有序列化存储后,必须有对应的反序列化,才能保证存储的数据能被重新读取和使用
""" 方法:dump,dumps dump:将对象直接修恶化为字符串存储到文件中 dumps:将对象直接系列化为字符串 """ import json obj = {'name': 'wangyong', "age": 26, 'height': 180, "gender": "男"} r1 = json.dumps(obj, ensure_ascii=False) # 取消默认ascii编码,同该文件的编码utf-8 py3默认,py2规定文件头 print(r1) # {"name": "wangyong", "age": 26, "height": 180, "gender": "男"} with open('1.txt','w',encoding='utf-8') as f: json.dump(obj, f, ensure_ascii = False) # 在当前目录生成文件 1.txt,文件内容同上
""" 方法:load,loads """ import json json_str = '{"name": "wangyong", "age": 26, "height": 180, "gender": "男"}' r2 = json.loads(json_str) # 默认跟当前文件被解释器执行的编码走 encoding = 'utf-8'有没有都行 print(r2,type(r2)) # {'name': 'wangyong', 'age': 26, 'height': 180, 'gender': '男'} <class 'dict'> with open('1.txt','r',encoding = 'utf-8') as f: r3 = json.load(f) print(r3,type(r3)) # {'name': 'wangyong', 'age': 26, 'height': 180, 'gender': '男'} <class 'dict'>
""" 方法:dump,dumps dump:将对象直接修恶化为字符串存储到文件中 dumps:将对象直接系列化为字符串 """ import pickle obj = {"name": 'wangyong', "age": 26, "height": 180, "gender": "男"} # 序列化 r1 = pickle.dumps(obj) print(r1) # b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00wangyongq\x02X\x03\x00\x00\x00ageq\x03K\x1aX\x06\x00\x00\x00heightq\x04K\xb4X\x06\x00\x00\x00genderq\x05X\x03\x00\x00\x00\xe7\x94\xb7q\x06u.' with open('2.txt','wb') as f: pickle.dump(obj,f) # 反序列化 r2 = pickle.loads(b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00wangyongq\x02X\x03\x00\x00\x00ageq\x03K\x1aX\x06\x00\x00\x00heightq\x04K\xb4X\x06\x00\x00\x00genderq\x05X\x03\x00\x00\x00\xe7\x94\xb7q\x06u.' print(r2) # {"name": 'wangyong', "age": 26, "height": 180, "gender": "男"} with open('2.txt','rb') as f: # data = f.read() obj = pickle.load(f) print(obj,type(obj)) # {"name": 'wangyong', "age": 26, "height": 180, "gender": "男"} <class 'dict'>