四、json、pickle

一、json(传数据方便)

1.1 json

就是一种有语法规范的字符串,用来存放数据的,完成各种语言之间的数据交互

1. 就是{}与[]的组合,{}存放双列信息(类比为字典),[]存放为单列信息(类比为列表)

2. {}的key必须是字符串,且必须为 " " 包裹

3. {}与[]中支持的,类型:dict、list、int、float、bool、null、str

1.2 序列化与反序列化

为什么会有很多序列化和反序列化模块?

因为程序中会出现各种的对象,如果要将这些对象持久化存储,必须先序列化
只有序列化存储后,必须有对应的反序列化,才能保证存储的数据能被重新读取和使用

1.2.1 序列化:将对象转化为字符串

"""
方法: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,文件内容同上

1.2.2 反序列化:将字符串转换为对象

"""
方法: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'>

二、pickle(存数据方便)

"""
方法: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'>

 

posted on 2021-06-08 13:05  软饭攻城狮  阅读(50)  评论(0编辑  收藏  举报

导航