Python 数据持久化

Python 数据持久化

      • [1.1 pickle ------ Python对象的序列化](#1.1 pickle —— Python对象的序列化)
      • 主要功能
      • 使用示例
      • [1.2 copyreg ------ 注册pickle支持函数](#1.2 copyreg —— 注册pickle支持函数)
      • 使用示例
      • [1.3 shelve ------ Python对象的持久化](#1.3 shelve —— Python对象的持久化)
      • 使用示例
      • [1.4 marshal ------ 内部使用的对象序列化](#1.4 marshal —— 内部使用的对象序列化)
      • 使用示例
      • [1.5 dbm ------ Unix数据库接口](#1.5 dbm —— Unix数据库接口)
      • 使用示例

1.1 pickle ------ Python对象的序列化

pickle模块用于将Python对象序列化为字节流,以便保存到文件或通过网络传输。

主要功能

  • pickle.dump(obj, file): 将对象序列化并保存到文件。
  • pickle.load(file): 从文件中加载并反序列化对象。

使用示例

python 复制代码
import pickle

# 保存对象
data = {'name': 'Alice', 'age': 30}
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

# 加载对象
with open('data.pkl', 'rb') as f:
    loaded_data = pickle.load(f)
print(loaded_data)

1.2 copyreg ------ 注册pickle支持函数

copyreg模块用于自定义对象的序列化和反序列化方法。

使用示例

python 复制代码
import copyreg
import pickle

class MyClass:
    def __init__(self, name, value):
        self.name = name
        self.value = value

def pickle_myclass(obj):
    return MyClass, (obj.name, obj.value)

copyreg.pickle(MyClass, pickle_myclass)

obj = MyClass("example", 42)
with open("myclass.pkl", "wb") as f:
    pickle.dump(obj, f)

with open("myclass.pkl", "rb") as f:
    loaded_obj = pickle.load(f)
print(loaded_obj)

1.3 shelve ------ Python对象的持久化

shelve模块用于将Python对象持久化到磁盘。

使用示例

python 复制代码
import shelve

# 保存对象
data = {'name': 'Alice', 'age': 30}
with shelve.open('mydata.shelve') as shelf:
    shelf['user_info'] = data

# 加载对象
with shelve.open('mydata.shelve') as shelf:
    loaded_data = shelf['user_info']
print(loaded_data)

1.4 marshal ------ 内部使用的对象序列化

marshal模块用于Python内部对象的序列化,通常用于保存字节码。

使用示例

python 复制代码
import marshal

# 保存对象
data = {'name': 'Alice', 'age': 30}
with open('data.marshal', 'wb') as f:
    marshal.dump(data, f)

# 加载对象
with open('data.marshal', 'rb') as f:
    loaded_data = marshal.load(f)
print(loaded_data)

1.5 dbm ------ Unix数据库接口

dbm模块提供了对Unix数据库文件的接口,用于存储键值对。

使用示例

python 复制代码
import dbm

# 打开数据库
with dbm.open('mydbm', 'c') as db:
    # 保存数据
    db['name'] = 'Alice'
    db['age'] = '30'
    
    # 获取数据
    print(db['name'])  # Alice
    print(db['age'])   # 30

    # 删除键
    del db['city']
    
    # 获取所有键
    print(list(db.keys()))  # ['name', 'age']
相关推荐
宇寒风暖5 分钟前
Flask 框架全面详解
笔记·后端·python·学习·flask·知识
seabirdssss9 分钟前
错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
java·开发语言
哪 吒15 分钟前
【2025C卷】华为OD机试九日集训第3期 - 按算法分类,由易到难,提升编程能力和解题技巧
python·算法·华为od·华为od机试·2025c卷
gnawkhhkwang28 分钟前
io_getevents 和 io_pgetevents 系统调用及示例
linux·c语言·开发语言
喵手28 分钟前
使用ASIWebPageRequest库编写Objective-C下载器程序
开发语言·macos·objective-c
weixin_4569042738 分钟前
C#泛型委托讲解
开发语言·c#
君莫笑几人回1 小时前
关于记录一下“bug”,在做图片上传的时候出现的小问题
java·开发语言·spring boot
rockmelodies1 小时前
RSA 解密逻辑
开发语言·python
澡点睡觉2 小时前
golang的包和闭包
开发语言·后端·golang
Tobiichiorigami.2 小时前
Python训练Day30
python