Python中的pickle和json模块

dumps => 卸出,从内存中导出,把数据从内存中变成可存储或可传输的,序列化 => 将Python数据转换为另一种格式的数据

loads => 加载,将数据加载至内存,把序列化后的数据重新读到内存里,反序列化 => 将其他格式的数据转换为Python数据

pickle和json模块

序列化和反序列化是对同一数据在不同格式间的来回转换。

python提供的模块 picklejson可以实现序列化和反序列化。

pickle

0. 导入模块
import pickle
1. pickle - dumps - 序列化

pickle.dumps()方法能把任意数据对象序列化成一个bytes格式,之后可以写入文件中

pickle.dumps(数据对象)

示例:

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
2.pickle - dump - 序列化

pickle.dump() 能够直接把任意数据对象序列化后写入file-like object:

示例:

# 把数据d序列化后写入文件dump.txt中
>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
3. pickle - loads - 反序列化

pickle.loads() 方法能把pickle.dumps()序列化后的数据反序列化回来

>>> d = b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
>>> pickle.dumps(d)
{'name'='Bob', 'age'=20, 'score'=88}
4. pickle - load - 反序列化

pickle.load() 方法能直接把pickle.dumps()序列化后保存在文件中的数据反序列化回来

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)   # 能够直接反序列化文件中的序列化数据
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}

json

0. 导入模块
import json
1. json - dumps - 序列化为json字符串

json.dumps()方法能够把Python数据序列化为 json字符串 :

import json
d = {"name": jane, "score": 88}
b = json.dumps(d)

# 返回json字符串
>>> b = '{"name": jane, "score": 88}'
2. json - dump - 直接写入json字符串至文件

json.dump()方法可以直接把序列化后的JSON字符串写入一个file-like Object

import json
d = {"name": jane, "score": 88}
f = open('json.txt', 'w')
json.dump(d, f)   # 将d序列化成json字符串后,写入json.txt
f.close()
3. json - loads - 将json字符串反序列化

json.loads()方法可以将一个json字符串数据反序列化成为Python标准数据:

import json
b = '{"name": jane, "score": 88}'
d = json.loads(b)

# 返回python类型数据
>>> d = {"name": jane, "score": 88}
4. json - load - 从文件中读取json字符串

json.load()方法可以直接从一个写有json字符串的文件中读出json字符串并反序列化为python数据:

import json
f = open('json.txt', 'r')
d = json.load(f)    # 直接读取f中的json字符串并反序列化

>>> d = {"name": jane, "score": 88}

Json进阶 - 序列化类的实例对象为json字符串

  1. 将类对象进行序列化,转换为json字符串:
import json


class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score


# 将Student实例转换为dict对象函数
def student2dict(stu):
    return {
        'name': stu.name,
        'score': stu.score
    }


stu = Student('David', 88)

d = json.dumps(stu, default=student2dict)

过程:student2dict函数先将stu对象转换为python字典 => json.dumps()将python字典序列化为json字符串

  1. 将json字典,反序列化为类的实例对象
import json


class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score


# 将Student实例转换为dict对象函数
def dict2student(stu_dict):
    return Student(stu_dict['name'], stu_dict['score'])


stu_json = '{"name": "Bob", "score": 98}'

d = json.loads(stu_json, object_hook=dict2student)

过程:json.loads()先将stu_json反序列化为python字典 => dict2student函数根据python字典实例化对象

你可能感兴趣的:(Python中的pickle和json模块)