python19 序列化

python19 序列化

序列化: 自定义对象是不能直接在IO中进行操作的。
对于普通的常用的类型: str —> 直接保存
如果是list,dict,set,int float 自定义类的对象… —> 保存到一个文件中
此时就需要序列化(list,dict, … 转成字节表示)

实现序列化的方式:

  1. json: 是一种轻量级的数据交换格式.
    {key:value,key:value,…key:[{}]}
    str = json.dumps(类型) —> 序列化
    类型 = json.loads(str) ----> 反序列化
  2. pickle:
    使用同json,但是可以直接操作自定义类型对象

区别: json模块是将对象转换成为字符串,而pickle模块是将对象转换成为二进制。

load和loads、dump和dumps区别:

  • json.dumps()
    对json进行编码,把数据类型转换成字符串。
  • json.dump(类型,文件流)
    对json进行编码, 把数据类型转换成字符串,并存储在文件中。
  • json.loads()
    对json进行解码,把字符串转换成数据类型 。
  • json.load(文件流)
    把文件打开,对json进行解码,从字符串转换成数据类型。

json

import json

with open('cartoon.txt', 'w') as ws:
    dict1 = {'name': '太一', 'age': 8, 'gender': '男'}
    print(type(dict1))
    # json中提供了一个dumps实现序列化,返回值就是序列化后的结果
    result = json.dumps(dict1)
    print(type(result))
    ws.write(result)

# 读取文件的信息

with open('cartoon.txt', 'r') as rs:
    content = rs.read()
    print(type(content))
    print(content)
    # 反序列化
    result = json.loads(content)
    print(type(result))
    print(result)
import json

with open('person.txt', 'w') as ws:
    dict1 = {'name': '小潘潘', 'age': 18, 'gender': '女'}
    json.dump(dict1, ws)

with open('person.txt') as rs:
    result = json.load(rs)
    print(result)

pickle

import pickle

with open('person1.txt', 'wb') as ws:
    dict1 = {'name': '冯提莫', 'age': 18, 'gender': '女'}
    print(type(dict1))
    result = pickle.dumps(dict1)
    print(type(result))
    ws.write(result)

with open('person1.txt', 'rb') as rs:
    content = rs.read()
    print(type(content))
    print(content)
    # 反序列化
    result = pickle.loads(content)
    print(type(result))
    print(result)
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def run(self):
        print('-------->run')

    def __str__(self):
        return self.name + ',' + str(self.age)


p1 = Person('阿和', 10)

with open('cartoon1.txt', 'wb') as ws:
    print(type(p1))
    result = pickle.dump(p1, ws)

with open('cartoon1.txt', 'rb') as rs:
    result = pickle.load(rs)
    print(type(result))
    print(result)

你可能感兴趣的:(1-python,python,字符串,json)