日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

提高Python數(shù)據(jù)存儲效率的利器:shelve和dbm的優(yōu)勢與應用!

來源: 責編: 時間:2023-12-01 17:15:42 292觀看
導讀作為常用的 python 自帶數(shù)據(jù)庫管理模塊,shelve 和 dbm 都是非常方便的對象持久化存儲和檢索工具,并且這兩個模塊在使用上具有許多不同的特點。本文將從 shelve 和 dbm 的介紹、用法、優(yōu)勢以及不同點等方面進行詳細闡述

作為常用的 python 自帶數(shù)據(jù)庫管理模塊,shelve 和 dbm 都是非常方便的對象持久化存儲和檢索工具,并且這兩個模塊在使用上具有許多不同的特點。vtL28資訊網(wǎng)——每日最新資訊28at.com

本文將從 shelve 和 dbm 的介紹、用法、優(yōu)勢以及不同點等方面進行詳細闡述和比較,希望能夠幫助讀者更好地理解和使用這兩個數(shù)據(jù)庫管理模塊。vtL28資訊網(wǎng)——每日最新資訊28at.com

vtL28資訊網(wǎng)——每日最新資訊28at.com

一、shelve 和 dbm 的介紹

shelve 和 dbm 都是 python 自帶的數(shù)據(jù)庫管理模塊,可以用于持久化存儲和檢索 python 中的對象。vtL28資訊網(wǎng)——每日最新資訊28at.com

雖然這兩個模塊的本質(zhì)都是建立 key-value 對應關(guān)系的數(shù)據(jù)庫,但 shelve 模塊更像是 python 中的持久化字典。vtL28資訊網(wǎng)——每日最新資訊28at.com

支持存儲 python 中的幾乎所有對象(如整型、字符串、字典、列表等),并且具有一定的數(shù)據(jù)壓縮功能。vtL28資訊網(wǎng)——每日最新資訊28at.com

而 dbm 則僅支持字符串類型的鍵和值,并且它們會以二進制文件的方式存儲在硬盤上。vtL28資訊網(wǎng)——每日最新資訊28at.com

shelve 需要使用 pickle 模塊對 python 對象進行序列化和反序列化,而 dbm 則直接使用字節(jié)序列進行存儲。vtL28資訊網(wǎng)——每日最新資訊28at.com

因此,如果需要實現(xiàn) python 對象的持久化存儲和檢索,建議使用 shelve;否則,如果采用 dbm 更為合適。vtL28資訊網(wǎng)——每日最新資訊28at.com

不僅如此,shelve 和 dbm 在使用上還存在許多區(qū)別,例如 shelve 具有鎖支持。vtL28資訊網(wǎng)——每日最新資訊28at.com

而 dbm 不支持鎖操作,這意味著在一些數(shù)據(jù)安全性較高的場景下,shelve 更為適合。vtL28資訊網(wǎng)——每日最新資訊28at.com

接下來,我們將重點介紹 shelve 和 dbm 的用法、優(yōu)勢以及不同點等方面。vtL28資訊網(wǎng)——每日最新資訊28at.com

1.shelve 的用法

使用 shelve 模塊建立和打開數(shù)據(jù)庫非常簡單,我們只需要執(zhí)行如下代碼:vtL28資訊網(wǎng)——每日最新資訊28at.com

import shelvedb = shelve.open('mydata.db')

這里,我們建立了一個名字為 mydata.db 的數(shù)據(jù)庫文件,并使用 shelve 模塊中的 open() 方法建立了一個 shelve 對象 db。vtL28資訊網(wǎng)——每日最新資訊28at.com

此時,我們可以使用 python 字典的方式來存儲和讀取對象:vtL28資訊網(wǎng)——每日最新資訊28at.com

import shelvedb = shelve.open('mydata.db')db['key1'] = 'value1'db['key2'] = 2db['key3'] = {'name': 'Jack', 'age': 25}print(db['key1']) # 輸出 value1print(db['key2']) # 輸出 2print(db['key3']) # 輸出 {'name': 'Jack', 'age': 25}

可以看到,我們成功地將不同類型的 python 對象存儲到了 shelve 數(shù)據(jù)庫中,并且通過相應的鍵名完成了對其的讀取操作。vtL28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,在使用 shelve 存儲自定義對象時,通過 setstate__() 和 __getstate() 方法來實現(xiàn)對象的序列化和反序列化。vtL28資訊網(wǎng)——每日最新資訊28at.com

shelve 對象也可以使用 python 的 with 語句進行上下文管理:vtL28資訊網(wǎng)——每日最新資訊28at.com

import shelvewith shelve.open('mydata.db') as db:    db['key4'] = {'name': 'Tom', 'age': 22}print(db['key4']) # 輸出 KeyError: 'key4'

使用 with 語句可以確保在代碼塊結(jié)束時,shelve 對象會被關(guān)閉,并將其所包含的對象保存到硬盤上。vtL28資訊網(wǎng)——每日最新資訊28at.com

此時,需要注意的是,由于已經(jīng)關(guān)閉了 shelve 對象,無法再直接使用 db 對象訪問鍵值 key4。vtL28資訊網(wǎng)——每日最新資訊28at.com

最后,我們需要手動關(guān)閉 shelve 數(shù)據(jù)庫:vtL28資訊網(wǎng)——每日最新資訊28at.com

import shelvedb = shelve.open('mydata.db')# 操作數(shù)據(jù)庫db.close()

2.dbm 的用法

與 shelve 類似,使用 dbm 模塊建立和打開數(shù)據(jù)庫也非常簡單:vtL28資訊網(wǎng)——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')

這里,我們建立了一個名字為 mydata.db 的數(shù)據(jù)庫文件,并使用 dbm 的 open() 方法建立了一個 dbm 對象 db。vtL28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,與 shelve 不同的是,dbm 只支持字符串類型的鍵和值,并且需要用字節(jié)串的形式作為鍵和值。vtL28資訊網(wǎng)——每日最新資訊28at.com

我們可以使用字節(jié)串來存儲字符串:vtL28資訊網(wǎng)——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')db[b'key1'] = b'value1'db[b'key2'] = b'value2'print(db[b'key1']) # 輸出 value1print(db[b'key2']) # 輸出 value2

需要注意的是,我們使用了字節(jié)串作為鍵和值,以便在存儲和讀取時使用。vtL28資訊網(wǎng)——每日最新資訊28at.com

如果要將 Unicode 字符串存儲到 dbm 中,需要使用 encode() 方法將其編碼為字節(jié)串,例如:vtL28資訊網(wǎng)——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')db[b'key3'] = '這是一個字符串'.encode('utf-8')print(db[b'key3'].decode('utf-8')) # 輸出 這是一個字符串

與 shelve 一樣,dbm 對象也可以使用 python 的 with 語句進行上下文管理:vtL28資訊網(wǎng)——每日最新資訊28at.com

import dbmwith dbm.open('mydata.db', 'c') as db:    db[b'key4'] = b'value4'print(db[b'key4']) # 輸出 KeyError: b'key4'

需要注意的是,在使用 with 語句時,db 對象也會在離開代碼塊時自動關(guān)閉。vtL28資訊網(wǎng)——每日最新資訊28at.com

最后,我們需要手動關(guān)閉 dbm 數(shù)據(jù)庫:vtL28資訊網(wǎng)——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')# 操作數(shù)據(jù)庫db.close()

二、shelve 和 dbm 的優(yōu)勢

shelve 和 dbm 模塊的優(yōu)勢在于它們非常方便,無需安裝任何第三方庫即可使用。vtL28資訊網(wǎng)——每日最新資訊28at.com

它們的 API 與 python 內(nèi)置的類型非常相似,因此使用起來非常簡單。vtL28資訊網(wǎng)——每日最新資訊28at.com

此外,它們對于小型數(shù)據(jù)存儲和檢索非常高效,并且具有跨平臺的優(yōu)勢。vtL28資訊網(wǎng)——每日最新資訊28at.com

盡管這些特點不一定具有普適性,但在許多程序中都是優(yōu)秀且合理的選擇。vtL28資訊網(wǎng)——每日最新資訊28at.com

此外,shelve 模塊具有數(shù)據(jù)壓縮的功能,可以在一定程度上提高存儲效率。vtL28資訊網(wǎng)——每日最新資訊28at.com

這是由于 shelve 會將 python 對象轉(zhuǎn)換為字符串,并壓縮這些字符串,從而減小數(shù)據(jù)文件的大小。vtL28資訊網(wǎng)——每日最新資訊28at.com

因此,如果需要長期存儲比較多的數(shù)據(jù),使用 shelve 可以使得磁盤占用量更小,并且可以加速數(shù)據(jù)存儲和檢索的速度。vtL28資訊網(wǎng)——每日最新資訊28at.com

三、shelve 和 dbm 的不同點

shelve 和 dbm 在使用上具有許多不同點。下面我們將重點討論它們的幾種不同之處。vtL28資訊網(wǎng)——每日最新資訊28at.com

1. 數(shù)據(jù)類型不同

最引人注目的是,shelve 和 dbm 支持的數(shù)據(jù)類型不同。vtL28資訊網(wǎng)——每日最新資訊28at.com

shelve 可以存儲任意的 python 對象,包括列表、字典、元組、自定義對象等,而 dbm 僅支持字節(jié)串類型的鍵和值。vtL28資訊網(wǎng)——每日最新資訊28at.com

具體來說,對于數(shù)據(jù)類型的限制,shelve 要比 dbm 更小。vtL28資訊網(wǎng)——每日最新資訊28at.com

這取決于具體應用需求,但是如果需要存儲 python 對象,則可以使用 shelve,否則可以使用 dbm。vtL28資訊網(wǎng)——每日最新資訊28at.com

2. 支持不同的鎖

shelve 具有鎖支持,這意味著它可以被多個進程或線程同時訪問,可以有效避免并發(fā)沖突的情況。vtL28資訊網(wǎng)——每日最新資訊28at.com

相比之下,dbm 不支持鎖操作,這意味著在訪問 dbm 數(shù)據(jù)庫時需要自己實現(xiàn)自己的鎖邏輯,以確保并發(fā)訪問的正確性。vtL28資訊網(wǎng)——每日最新資訊28at.com

3. 磁盤空間占用不同

盡管 shelve 和 dbm 都是將數(shù)據(jù)存儲在硬盤上,但是占用的磁盤空間大小卻有所不同。vtL28資訊網(wǎng)——每日最新資訊28at.com

通常情況下,shelve 會壓縮數(shù)據(jù)并存儲它們,因此在許多情況下,shelve 會占用更少的磁盤空間。vtL28資訊網(wǎng)——每日最新資訊28at.com

而 dbm 不需要進行壓縮操作,因此當存儲的數(shù)據(jù)量較小時,dbm 相對于 shelve 更為節(jié)省磁盤空間。vtL28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

在本文中,我們詳細介紹了 shelve 和 dbm 兩個 python 自帶的數(shù)據(jù)庫管理模塊,包括它們的介紹、用法、優(yōu)勢以及不同點等。vtL28資訊網(wǎng)——每日最新資訊28at.com

雖然 shelve 和 dbm 的共同點是都能實現(xiàn)簡單的持久化存儲和檢索功能。vtL28資訊網(wǎng)——每日最新資訊28at.com

但是這兩個模塊在存儲和檢索的數(shù)據(jù)類型、支持鎖的程度以及磁盤空間占用等方面存在許多不同點。vtL28資訊網(wǎng)——每日最新資訊28at.com

在選擇具體的模塊時,需要結(jié)合實際情況來進行選擇。vtL28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-35893-0.html提高Python數(shù)據(jù)存儲效率的利器:shelve和dbm的優(yōu)勢與應用!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何在 matplotlib 中實現(xiàn)多子圖布局?

下一篇: 使用IntelliJ IDEA高效進行Java代碼分析和性能調(diào)優(yōu)

標簽:
  • 熱門焦點
  • 印度登月最關(guān)鍵一步!月船三號今晚進入環(huán)月軌道

    8月5日消息,據(jù)印度官方消息,月船三號將于北京時間今晚21時30分左右開始近月制動進入環(huán)月軌道。這是該探測器能夠成功的最關(guān)鍵步驟之一,如果成功將開始圍
  • 十個可以手動編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現(xiàn)了一個流處理程序
  • 把LangChain跑起來的三個方法

    使用LangChain開發(fā)LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 分享六款相見恨晚的PPT模版網(wǎng)站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網(wǎng)站旨在為全球Office用戶提供豐富的高品質(zhì)原創(chuàng)PPT模板、實用文檔、數(shù)據(jù)圖表及個性化定制服務(wù)。優(yōu)點:OfficePLUS是微軟官方網(wǎng)站,囊括PPT模板、Word模
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設(shè)計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了——貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對“勢”的把握,這其中最關(guān)鍵的當屬對企業(yè)戰(zhàn)略的制定,且能夠站在未來看現(xiàn)在,即使這其中的
  • 網(wǎng)傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網(wǎng)友@長三角行健者爆料稱,據(jù)經(jīng)銷商集團反饋,小米汽車目前已經(jīng)開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
Top 主站蜘蛛池模板: 高青县| 贡嘎县| 波密县| 永仁县| 呼伦贝尔市| 潜江市| 平邑县| 客服| 增城市| 焦作市| 彩票| 海宁市| 镇康县| 临夏市| 无棣县| 合作市| 衡阳市| 金昌市| 泰州市| 浦江县| 乐至县| 包头市| 忻州市| 绥宁县| 潞城市| 大姚县| 监利县| 邛崃市| 固始县| 彩票| 醴陵市| 方城县| 镶黄旗| 平安县| 会泽县| 胶州市| 来凤县| 无为县| 阿克苏市| 青州市| 车险|