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']
相关推荐
weixin_4462608538 分钟前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao1 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区1 小时前
怎么把C语言学到精通?
c语言·开发语言
qetfw1 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具
心平气和量大福大2 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai2 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户8356290780512 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
এ慕ོ冬℘゜2 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa2 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行2 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化