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']