import pickle
with open('pickle-example.p', 'rb') as pfile:
integers = pickle.load(pfile)
print integers
上面的输出应该是[1, 2, 3, 4, 5]。
示例
import shelve
integers = [1, 2, 3, 4, 5]
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'c')) as shelf:
with shelve.open('shelf-example', 'c') as shelf:
shelf['ints'] = integers
注意如何通过类似字典的访问将对象添加到工具架。 使用如下代码将对象读回:
import shelve
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'r')) as shelf:
with shelve.open('shelf-example', 'r') as shelf:
for key in shelf.keys():
print(repr(key), repr(shelf[key]))
3条答案
按热度按时间w46czmvw1#
pickle
用于将一些对象(或多个对象)序列化为文件中的单个字节流。shelve
构建在pickle
之上,并实现了一个序列化字典,其中对象被pickle,但与一个键(某个字符串)相关联,因此您可以加载搁置的数据文件并通过键访问pickle对象。下面是两者之间的用法示例(应该可以在Python 2.7和Python 3.x的最新版本中使用)。
示例
这会将
integers
列表转储到名为pickle-example.p
的二进制文件中。现在试着阅读回pickle文件。
上面的输出应该是
[1, 2, 3, 4, 5]
。示例
注意如何通过类似字典的访问将对象添加到工具架。
使用如下代码将对象读回:
输出将为
'ints', [1, 2, 3, 4, 5]
。piztneat2#
根据pickle文件:
序列化是比持久化更原始的概念;尽管pickle读取和写入文件对象,但是它不处理命名持久对象的问题,也不是(甚至更复杂)并发访问持久对象的问题。pickle模块可以将复杂对象转换为字节流,也可以将字节流转换为具有相同内部结构的对象。处理这些字节流最明显的方法可能是将它们写入文件,但也可以通过网络发送它们或将它们存储在数据库中。shelve模块提供了一个简单的接口,用于在DBMS样式的数据库文件上pickle和unpickle对象。
dgenwo3n3#
优点和缺点
因为没人真的提过
DBM:
1.简单易用:DBM是一个基本的键值存储,需要最少的设置。DBM提供了对数据的快速访问,尤其是与其他基于磁盘的存储选项相比。
1.可处理大量数据:DBM能够处理非常大的数据集,前提是您有足够的磁盘空间。
1.功能有限:DBM是一个简单的键-值存储,不提供高级功能,如事务或多进程并发。
1.不太适合复杂的数据结构:DBM最适合存储简单的键-值对,对于需要每个键多个值或更高级查询功能的复杂数据结构,可能不是最佳选择。
货架:
1.丰富的功能:Shelve为数据访问提供了更丰富的API,包括每个键存储多个值的能力、对事务的支持以及更高级的查询功能。
1.易于使用:Shelve是比DBM更友好的API,因为它为数据存储和检索提供了一个类似字典的接口。
慢于DBM:
1.与DBM相比,Shelve的开销更高,可能不适合大型数据集或具有高性能要求的应用程序。
1.可能无法很好地缩放:Shelve可能无法处理非常大的数据集或高并发级别,因为它更容易出现锁定和其他性能问题。