pickle模块

发布时间 2024-01-12 17:07:47作者: ssrheart

pickle模块

(1)什么是pickle模块

  • pickle 主要用于将对象序列化为二进制数据以及从二进制数据反序列化为对象,以便于在短期内进行数据的保存、传输或者跨程序、跨网络的对象传递。pickle 存储了对象的状态,包括对象所属的类及其属性值等信息。

  • pickle 模块可以处理几乎所有的 Python 对象,包括自定义的类和实例。它是一种用于将对象持久化的机制,可以将对象保存到磁盘上的文件,然后在需要的时候重新加载到内存中。

  • pickle 适合用于短期保存对象状态,例如在程序运行期间保存状态,或者将状态传递给其他进程或计算机。

  • pickle序列化(dumps)以后的数据是二进制。

import pickle


class Student(object):
    def __init__(self,name):
        self.name = name

stu = Student(name='heart')
pickle_one = pickle.dumps(stu)
print(pickle_one) # b'\x80\x04\x95.\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x07Student\x94\x93\x94)\x81\x94}\x94\x8c\x04name\x94\x8c\x05heart\x94sb.'
pickle_two = pickle.loads(pickle_one)
print(pickle_two) # <__main__.Student object at 0x0000011F9B6DFEB0>
print(pickle_two.name) # heart

(2)pickle的四个方法

  • pickle.dumps: 将 Python 对象序列化为一个字节对象。
  • pickle.loads: 将字节对象反序列化为 Python 对象。
import pickle


class Student(object):
    def __init__(self,name):
        self.name = name

stu = Student(name='heart')
pickle_one = pickle.dumps(stu)

print(pickle_one) # b'\x80\x04\x95.\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x07Student\x94\x93\x94)\x81\x94}\x94\x8c\x04name\x94\x8c\x05heart\x94sb.'

pickle_two = pickle.loads(pickle_one)

print(pickle_two) # <__main__.Student object at 0x0000011F9B6DFEB0>

print(pickle_two.name) # heart
  • pickle.dump:将 Python 对象序列化并写入文件对象。
  • 这个地方要写的是二进制数据,所以需要用到wb。
import pickle

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

def save_data(path, data):
    with open(path, 'wb') as f:
        pickle.dump(data, f)

p1 = Person(name='heart',age=18)
p2 = Person(name='god', age=20)

save_data(path='heart', data=p1)
save_data(path='god', data=p2)

image

  • pickle.load:从文件对象中读取序列化的数据并反序列化为 Python 对象。
  • 这个地方要读的是二进制数据,所以需要用到rb。
import pickle


class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

def read_data(path):
    with open(path, 'rb') as f:
        data = pickle.load(f)
    return data

p1 = Person(name='heart', age=18)
p2 = Person(name='god', age=20)

data1 = read_data(path='heart')
data2 = read_data(path='god')
print(data1)  # <__main__.Person object at 0x0000016F44AFBE50>
print(data2)  # <__main__.Person object at 0x0000016F44AFBDF0>
print(data1.name, data1.age)  # heart 18
print(data2.name, data2.age)  # god 20

(3)总结

  • dumpsloads 用于序列化和反序列化。

  • dumpload 用于将对象写入文件和从文件中读取对象。

  • 这些函数允许在 Python 程序之间轻松地序列化和反序列化对象,以便在不同的时间和地点使用相同的数据。需要注意的是,pickle 的使用应谨慎,特别是在处理不受信任的数据时,因为它可以执行一些代码,可能存在安全风险。