python中pickle的用法
Python中pickle的用法
Pickle是Python中最常用的序列化模块之一。它可以将Python对象转换为字节流,以便在网络上传输或保存到磁盘上。本文将介绍pickle的基本用法和常见应用场景。
一、基本用法
1.1 pickle.dump()方法
pickle.dump(obj, file, protocol=None, *, fix_imports=True)
该方法将Python对象obj序列化并写入文件file中。其中,obj表示要序列化的对象,file表示要写入的文件对象,protocol表示协议版本号(默认为None),fix_imports表示是否修复导入问题(默认为True)。
示例代码:
import pickle
data = {'name': 'Tom', 'age': 18}
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)
1.2 pickle.load()方法
pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict")
该方法从文件file中读取序列化数据,并返回反序列化后的Python对象。其中,file表示要读取的文件对象,fix_imports表示是否修复导入问题(默认为True),encoding表示编码方式(默认为ASCII),errors表示错误处理方式(默认为strict)。
示例代码:
import pickle
with open('data.pkl', 'rb') as f:
    data = pickle.load(f)
    print(data)
二、高级用法
2.1 序列化自定义类对象
Pickle不仅可以序列化内置类型和标准库类型,还可以序列化自定义类对象。但是,为了能够正确地反序列化对象,需要确保类定义在反序列化时可用。
示例代码:
import pickle
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
p1 = Person('Tom', 18)
with open('person.pkl', 'wb') as f:
    pickle.dump(p1, f)
with open('person.pkl', 'rb') as f:
    p2 = pickle.load(f)
    print(p2.name, p2.age)
2.2 序列化函数和Lambda表达式
Pickle可以序列化函数和Lambda表达式,但需要注意以下几点:
- 函数必须在反序列化时可用;
- Lambda表达式不能引用外部变量。
示例代码:
import pickle
def add(x, y):
    return x + y
f = lambda x: x**2
with open('func.pkl', 'wb') as file:
    pickle.dump(add, file)
    pickle.dump(f, file)
with open('func.pkl', 'rb') as file:
    add_func = pickle.load(file)
import pickle    print(add_func(1, 2))
    f_lambda = pickle.load(file)
    print(f_lambda(3))
2.3 序列化多个对象
Pickle可以将多个对象一起序列化,并写入同一个文件中。但是,在反序列化时需要按照写入的顺序依次读取。
示例代码:
import pickle
data1 = {'name': 'Tom', 'age': 18}
data2 = {'name': 'Jerry', 'age': 20}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。