zoukankan      html  css  js  c++  java
  • python基础教程_学习笔记18:标准库:一些最爱——shelve

    版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/signjing/article/details/36029981

    标准库:一些最爱

    shelve

    Shelve唯一有趣的函数是open

    在调用它的时候(使用文件名称作为參数),它会返回一个Shelf对象,能够用它来存储内容。

    仅仅须要把它当作普通的字典(可是键一定要作为字符串)来操作就可以,在完毕工作之后,调用它的close方法。

     

    意识到shelve.open函数返回的对象并非普通的映射是非常重要的。

    >>> import shelve

    >>> s=shelve.open('a.txt')

    >>> s['x']=['a','b','c']

    >>> s['x'].append('d')

    >>> s['x']

    ['a', 'b', 'c']

     

    ‘d’去哪了?

    当你在shelf对象中查找元素的时候,这个对象都会依据已经存储的版本号进行又一次构建。当你将元素赋给某个键的时候。它就被存储了。

    上例中的操作例如以下:

    列表[‘a’,’b’,’c’]存储在键x下;

    获得存储的表示,而且依据它来创建新的列表,而’d’被加入到这个副本中。改动的版本号没有被保存。

    终于,再次获得原始版本号——没有’d’。

    为了正确地使用shelve模块改动存储的对象。必须将暂时变量绑定到获得的副本上。而且在它被改动后又一次存储这个副本。

    >>> temp=s['x']

    >>> temp.append('d')

    >>> s['x']=temp

    >>> s['x']

    ['a', 'b', 'c', 'd']

    还有个解决的方法,将open函数的writeback參数设为True

    假设这样做,全部从shelf读取或者赋值到shelf的数据结构都会保存在内存(缓存)中,而且仅仅有在关闭shelf的时候才写回到磁盘中。假设处理的数据不大,而且不想考虑这些问题。那么将writeback设为True(确保在最后关闭了shelf)的方法还是不错的。

  • 相关阅读:
    Codeforces 115A- Party(DFS)
    【剑指offer】Q19:二叉树的镜像
    Codeforces Round #244 (Div. 2)D (后缀自己主动机)
    iWatch报错: Authorization request cancled
    [HDU 1421]搬寝室(富有新意的DP)
    hdu 2883 kebab(时间区间压缩 && dinic)
    bzoj-3524 Couriers
    设计模式
    HDU 5063 Operation the Sequence(暴力)
    报错OPTION SQL_SELECT_LIMIT=
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10028058.html
Copyright © 2011-2022 走看看