首頁  >  文章  >  後端開發  >  shelve模組的基本介紹

shelve模組的基本介紹

零下一度
零下一度原創
2017-07-23 10:04:522509瀏覽

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。

 

以上是shelve模組的基本介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn