-
marshal
模块:-
marshal
模块用于序列化 Python 对象,将其转换为字节流,以便在不同的 Python 程序之间进行传输或存储。 -
这个模块主要用于将 Python 对象编码成字节码形式,它是 Python 解释器内部用于编码和解码 Python 对象的底层机制。
-
由于
marshal
生成的字节码是特定于 Python 版本的,因此不适合用于长期存储或与其他编程语言交互。 -
marshal
生成的字节码通常不易于人类阅读和编辑,因此不适合用于与人交互的场景。
-
代码示例:
保存数据到文件:
import marshal
# 字典数据
data = {'key1': 'passwd1', 'key2': 'passwd2'}
# 将数据序列化并保存到文件
with open('data.marshal', 'wb') as f:
marshal.dump(data, f)
从文件中读取数据:
import marshal
# 从文件反序列化数据
with open('data.marshal', 'rb') as f:
data = marshal.load(f)
print(data)
-
shelve
模块:-
shelve
模块是 Python 标准库中的简单持久化存储方案,基于dbm
(或其他后端数据库)来存储 Python 对象。 -
shelve
允许你像字典一样存储 Python 对象,其中的键值对是字符串,值可以是任意可被pickle
序列化的对象。 -
shelve
的优点是简单易用,可以方便地存储和检索 Python 对象,但它也有一些限制,例如不支持并发写入和不同版本之间的兼容性问题。 -
由于
shelve
使用pickle
来序列化对象,因此你需要确保你要存储的对象是可被pickle
序列化的。
-
代码示例:
保存数据到文件
import shelve
# 创建一个shelve对象,指定数据库名称
with shelve.open('data.db') as db:
db['key1'] = 'value1'
db['key2'] = 'value2'
从文件读取数据
import shelve
# 打开shelve对象并读取数据
with shelve.open('data.db') as db:
print(db['key1'])
print(db['key2'])
总结:
marshal
主要用于内部数据传输和编译优化,而 shelve
主要用于简单的持久化存储,用于将 Python 对象以键值对的形式存储在磁盘上,方便后续读取和操作。