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']
相关推荐
篱笆院的狗11 分钟前
Java 中如何创建多线程?
java·开发语言
默 语12 分钟前
RAG实战:用Java+向量数据库打造智能问答系统
java·开发语言·数据库
carver w12 分钟前
智能医学工程选题分享
python
晨晖213 分钟前
二叉树遍历,先中后序遍历,c++版
开发语言·c++
醒过来摸鱼13 分钟前
Java Compiler API使用
java·开发语言·python
wangchen_017 分钟前
C/C++时间操作(ctime、chrono)
开发语言·c++
Dev7z29 分钟前
基于MATLAB HSI颜色空间的图像美颜系统设计与实现
开发语言·matlab
superman超哥31 分钟前
仓颉语言中字符串常用方法的深度剖析与工程实践
开发语言·后端·python·c#·仓颉
癫狂的兔子41 分钟前
【BUG】【Python】精确度问题
python·bug
想学后端的前端工程师1 小时前
【Spring Boot微服务开发实战:从入门到企业级应用】
java·开发语言·python