视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
shelve模块的基本介绍
2020-11-27 14:23:36 责编:小采
文档


shelve

shelve是一额简单的数据存储方案,他只有一个函数就是open(),这个函数接收一个参数就是文件名,然后返回一个shelf对象,你可以用他来存储东西,就可以简单的把他当作一个字典,当你存储完毕的时候,就调用close函数来关闭

这个有一个潜在的小问题,如下:

[python] view plain copy
>>> import shelve 
>>> s = shelve.open('test.dat') 
>>> s['x'] = ['a', 'b', 'c'] 
>>> s['x'].append('d') 
>>> s['x'] 
['a', 'b', 'c']

存储的d到哪里去了呢?其实很简单,d没有写回,你把['a', 'b', 'c']存到了x,当你再次读取s['x']的时候,s['x']只是一个拷贝,而你没有将拷贝写回,所以当你再次读取s['x']的时候,它又从源中读取了一个拷贝,所以,你新修改的内容并不会出现在拷贝中,解决的办法就是,第一个是利用一个缓存的变量,如下所示

[python] view plain copy
>>> temp = s['x'] 
>>> temp.append('d') 
>>> s['x'] = temp 
>>> s['x'] 
['a', 'b', 'c', 'd']

在python2.4中有了另外的方法,就是把open方法的writeback参数的值赋为True,这样的话,你open后所有的内容都将在cache中,当你close的时候,将全部一次性写到硬盘里面。如果数据量不是很大的时候,建议这么做。

一、简介

  在python3中我们使用json或者pickle持久化数据,能dump多次,但只能load一次,因为先前的数据已经被后面dump的数据覆盖掉了。如果我们想要实现dump和load多次,可以使用shelve模块。shelve模块可以持久化所有pickle所支持的数据类型。

二、持久化数据

1、数据持久化

import shelve
import datetime

info = {'name': 'bigberg', 'age': 22}
name = ['Apoll', 'Zous', 'Luna']
t = datetime.datetime.now()

with shelve.open('shelve.txt') as f:
 f['name'] = name # 持久化列表
 f['info'] = info # 持久化字典 
 f['time'] = t # 持久化时间类型

  

执行代码后会生成3个文件:shelve.txt.bak、shelve.txt.dat、shelve.txt.dir。

  • shelve.txt.bak 的内容

  • 'info', (512, 45)
    'name', (0, 42)
    'time', (1024, 44)
  • shelve.txt.dat  

  • ?]q (X ApollqX ZousqX Lunaqe. ?}q (X ageqKX nameqX bigbergqu. ?cdatetime
    datetime
    q C
    ?"
    2?q?qRq.
  • shelve.txt.dir 的内容

  • 'info', (512, 45)
    'name', (0, 42)
    'time', (1024, 44)

    2、数据读取

    我们使用get来获取数据

    import shelve
    
    with shelve.open('shelve.txt') as f:
     n = f.get('name')
     i = f.get('info')
     now = f.get('time')
    
    print(n)
    print(i)
    print(now)
    
    #
    输出 ['Apoll', 'Zous', 'Luna'] {'age': 22, 'name': 'bigberg'} 2017-07-08 11:07:34.865022

    1、shelve模块是一个简单的key,value将内存数据通过文件持久化的模块。

    2、shelve模块可以持久化任何pickle可支持的python数据格式。

    3、shelve就是pickle模块的一个封装。

    4、shelve模块是可以多次dump和load。

    下载本文
    显示全文
    专题