python shelve模組的使用及注意點

2021-08-16 05:37:28 字數 2456 閱讀 7408

shelve是python中一種儲存結構化資料的模組,用法跟字典相似,以鍵值對的形式儲存。基本使用方法:

1.引入模組

import shelve
2.建立資料檔案:

with shelve.open(filename) as

object:

object = shelve.open(filename)

兩種檔案操作的方式均可以。不難看出,對shelf檔案資料的讀寫是不用指定檔案開啟方式的,直接open就可以了,跟json比起來較方便,儘管只適用於python程式。對於shelf內容的操作,不用像檔案操作一樣,需要readline等先對資料做一波處理,也不用像pickle/json一樣需要load/dump,更不需要像pformat一樣將資料結構輸出為字串,格式化寫入程式檔案進行呼叫,對於shelf的操作,如上object即可視為字典變數,操作同字典

3.shelf的鍵值只能儲存基礎的資料結構,例如file型別就不行

4.shelf雖然同字典很類似,但略有差別,key只能是字串型別,不能是數值

最近在code刻意使用了一下shelve模組,確實相當好用,幾乎跟字典一摸一樣(當然不是這樣),由此遇到了兩個問題,也花了一點時間去發現問題,更為深入的了解了一下shelve模組。上**。

問題一:

import shelve

with shelve.open('asdf') as b:

b = ,

'c':}if

'b'in b:

print('yes')

print (list(b.keys()))

print(b['c']['d'])

>>>>

yes['b', 'c']

5000

乍一看,確實沒有問題,這就算是資料儲存好了,那麼模擬讀取資料試試看。

import shelve

with shelve.open('asdf') as b:

# b = ,

# 'c':

# }if

'b'in b:

print('yes')

print (list(b.keys()))

print(b['c']['d'])

>>>>

traceback (most recent call last):

file "c:\users\stan pao\desktop\辦公\python\test\temp_test.py", line 13, in

print(b['c']['d'])

執行拋錯,可以看出,儲存的資料呢?這跟是空的麼。檢查一下生成的三個檔案,好像確實都是空的(windows下shelf檔案是生成三個,兩個可讀乙個不可讀,linux下生成乙個二進位制檔案,不可讀)。

直接上結論:經過一番嘗試,shelf鍵值對進行資料結構儲存時,只能嚴格按照key = value這樣的形式儲存,而不能想當然完全將shelf視為字典直接進行初始化。

import shelve

with shelve.open('asdf') as b:

b['b'] =

b['c'] =

if'b'in b:

print('yes')

print (list(b.keys()))

print(b['c']['d']

如此即可。

問題二:

本來想從shelf中獲得資料修改以儲存,但是失敗了。

import shelve

with shelve.open('asdf') as b:

b['b'] =

b['c'] =

b['c']['d'] = 1000

if'b'

in b:

print('yes')

print (list(b.keys()))

print(b['c']['d'])

>>>>

yes['b', 'c']

5000

明明對其賦值成為1000,怎麼沒變呢?shelf預設初始化儲存資料之後是不進行會寫,因此之後的資料變動不會被寫入,因此只要指定writeback引數即可

import shelve

with shelve.open('asdf',writeback=true) as b:

b['b'] =

b['c'] =

b['c']['d'] = 1000

if'b'

in b:

print('yes')

print (list(b.keys()))

print(b['c']['d'])

>>>>

yes['b', 'c']

1000

python shelve程式設計

你如果需要乙個簡單的儲存方案,那麼,python中shelve模板可以滿足你的。shelve唯一有趣的函式open,呼叫的時候返回乙個shelf物件,你可以用它來儲存物件。只需要把她當做字典來使用就可以了。但是一定注意 鍵一定是字串。所以如果你的鍵是數字,建議轉換一些。int str 函式str。例...

模組的使用,模組的搜尋路徑

模組的使用 1 什麼是模組 模組是一系列功能的集合體 常見的模組形式 自定義模組 第三方模組 內建模組 1 乙個module.py檔案就是乙個模組,檔名是module.py,而模組名是module 2 乙個包含有 init py檔案的資料夾也是模組 3 已被編譯為共享庫或dll的c或c 擴充套件 4...

python模組 os模組的用法

1 os.getcwd 獲取當前工作的目錄,即當前python指令碼工作的目錄路徑 23 os.phdir dirname 改變當前指令碼的工作目錄 相當於shell下cd 45 os.curdir 返回當前目錄 67 os.pardir 獲取當前目錄字串名 89 os.makedirs dirna...