当前位置: 首页 > 面试题库 >

Pickle与Shelve在Python中存储大型词典

万俟浩
2023-03-14
问题内容

如果我将大目录存储为pickle文件,是否通过加载cPickle将其全部消耗到内存中?

如果是这样,是否有一种跨平台的方式来获取类似的信息pickle,但是在一项中访问每个条目一个键(即避免将所有字典加载到内存中,而仅按名称加载每个条目)?我知道shelve应该这样做:pickle好像一样便携吗?


问题答案:

我知道应该这样做:虽然像泡菜一样轻巧?

是。shelve是Python标准库的一部分,是用Python编写的。

编辑

因此,如果您有大型词典:

bigd = {'a': 1, 'b':2, # . . .
}

而且您想保存它而不必稍后再阅读整个内容,而不必将其保存为泡菜,最好将其保存为一个架子(一种磁盘词典)。

import shelve

myShelve = shelve.open('my.shelve')
myShelve.update(bigd)
myShelve.close()

然后,您可以:

import shelve

myShelve = shelve.open('my.shelve')
value = myShelve['a']
value += 1
myShelve['a'] = value

您基本上将搁置的对象像字典一样对待,但是将项目存储在磁盘上(作为单个泡菜)并根据需要读取。

如果您的对象可以存储为属性列表,那么sqlite可能是一个不错的选择。架子和泡菜很方便,但是只能通过Python访问,但是sqlite数据库可以从大多数语言中读取。



 类似资料:
  • 创建新的Shelf # shelve_create.py import shelve with shelve.open('test_shelf.db') as s: s['key1'] = { 'int': 10, 'float': 9.5, 'string': 'Sample data', } # shelve_existing

  • 问题内容: 我需要附加一个泡菜文件(因为我一次都没有整个字典)。为此,我编写了以下代码: 但是,当我加载泡菜文件时,我在那里找不到字典f的值? 有人可以建议我应该如何添加一个泡菜文件吗? 另外,像“ dbm”这样的数据库无法满足我的需求,因为我正在Windows上工作 问题答案: 腌制流完全是独立的,因此解腌将一次解腌一个对象。 因此,要释放多个流,应重复释放该文件,直到得到EOFError为止:

  • 本文向大家介绍用pickle存储Python的原生对象方法,包括了用pickle存储Python的原生对象方法的使用技巧和注意事项,需要的朋友参考一下 在Python中存储数据到文件中时,简单的做法是调用open函数执行文件写入操作,但是这样做的话,当我们要重新读取文件内容时,就会出现类型不匹配的情况,因为读取的都是字符串的形式,所以还需要进行类型转换,这样不简洁。 或者使用eval函数把字符串转

  • 在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象。当Python运行时,对象存储在内存中,随时等待系统的调用。然而,内存里的数据会随着计算机关机和消失,如何将对象保存到文件,并储存在硬盘上呢? 计算机的内存中存储的是二进制的序列 (当然,在Linux眼中,是文本流)。我们可以

  • 本文向大家介绍Python使用pickle模块储存对象操作示例,包括了Python使用pickle模块储存对象操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python使用pickle模块储存对象操作。分享给大家供大家参考,具体如下: 众所周知,当我们需要储存数据的时候,就需要用到重定向。但是,这些都是储存简单的数据类型,那么当我们需要存储一个类的实例的时候该怎么存储呢? 实际上

  • 本文向大家介绍简单谈谈Python中的json与pickle,包括了简单谈谈Python中的json与pickle的使用技巧和注意事项,需要的朋友参考一下 这是用于序列化的两个模块: • json: 用于字符串和python数据类型间进行转换 • pickle: 用于python特有的类型和python的数据类型间进行转换 Json 模块提供了四个功能:dumps、dump、loads、load