Python shelve模塊

我們在日常生活中都遇到過很多這樣的情況,我們必須使用數據庫管理系統來存儲所有需要的信息和數據。使用數據庫管理系統通常非常簡單,但是當我們必須存儲一些複雜的結構化數據時,有時會變得有點困難。數據庫管理系統有各種各樣的類型,但是我們在日常生活中通常使用的最常見的類型是關係數據庫管理系統。關係數據庫管理系統是一個有效的工具和管理系統,我們可以在其中存儲所有必要的信息和數據,並非常容易地管理它們。在很多情況下,我們不必使用關係數據庫管理系統,或者不可能使用關係數據庫管理系統來存儲數據。在這種情況下,我們會想到一些問題:在這種情況下,是否有其他選擇,是否有其他方法或工具來存儲數據等。

這些問題的答案是肯定的!當我們不需要使用關係數據庫管理系統方法時,我們有其他工具和方法來存儲數據。我們還有其他工具,其中許多工具都與編程語言庫相關聯。這意味着,在編程世界中,當使用關係數據庫管理系統不是一個選項時,有一些庫提供了有效的工具來使用。這個東西也適用於 Python,我們在 Python 中有庫,通過它我們可以通過創建一個類似 DBMS 的接口來存儲我們所有的重要數據。Python 中這樣的庫或模塊之一是shelve模塊,這是一種存儲或持久數據存儲的有效工具。在本教程中,我們將學習 Python 的shelve模塊,在 Python 程序中使用shelve模塊將數據存儲在其中。

Python 中的shelve模塊

Python 的shelve模塊是一個非常流行的 Python 模塊,它像一個使用 Python 程序在文件中持久存儲數據的有效工具一樣工作。正如這個模塊的名字所暗示的,即,擱置,我們可以很容易地解釋它將作為一個擱置對象工作,將我們的所有數據保存在一個文件中,並保存所有必要的信息。在“擱置”模塊中,定義了一個“擱置”對象,它的行為類似於一個字典類型的對象,並且持久地存儲在我們計算機的磁盤文件中。這就是我們如何通過 Python shelve模塊將所有數據和信息保存在我們的系統中,並一直保存到我們想要的時候。

shelve模塊:簡介

Python 的shelve模塊是一個有效的工具,通過它,我們可以將文件中的所有數據和信息存儲起來,並將其保存在計算機的存儲器中,直到我們改變主意刪除它。shelve模塊不僅有助於在文件中存儲信息,而且在修改已經存在的信息和在同一文件中添加一些新信息時也非常有效。通過在 Python 程序中使用shelve模塊及其功能,我們可以從該模塊執行所有這些操作(創建、讀取、寫入和刪除文件)。shelve模塊創建了一個與 UNIX 等系統上的數據庫管理系統數據庫非常相似的文件。我們只能使用字符串數據類型作為文件中存在的特殊字典對象的鍵,而擱置文件中的可選擇對象可以作為鍵的值。

shelve模塊:類

像任何其他 Python 模塊一樣,Python 的shelve模塊中也有一些類,我們將在本節中討論這些類。Python shelve模塊中定義了以下三個類:

| 南號碼 | 模塊類 | 描述 |
| one | 自我等級 | 擱板類是擱板模塊的基類,用於擱板文件中的擱板實現。我們可以在 Python 程序中使用類似 dict 的對象從shelve模塊初始化擱置類。 |
| Two | 數據庫文件名架類 | 這是基本盤架類的一個子類,它接受盤架文件的名稱作為其構造器的參數,而不是類似 dict 的對象參數。 |
| three | BsdDbShelf 類 | BsdDbShelf 類也是基本盤架類的一個子類,這個類接受一個類似 dict 的對象作為參數,這使得這個子類不同於 DBFileNameShelf 類。我們作為參數傳遞給其構造器的類似 dict 的對象參數應該支持 first(),last(),previous(),next()和 set_location()方法。 |

現在,這裡我們已經描述了shelve模塊中存在的所有類和子類,並且我們還了解了在這些類中哪個對象類型被作為參數。

使用shelve模塊

shelve模塊是 Python 的內置庫,可以在 Python 2 和 3 的所有版本中找到預裝的這個模塊。因此,為了使用shelve模塊,我們不必首先使用任何安裝程序或 pip 命令來安裝shelve模塊。我們可以在 Python 程序中直接使用‘import 擱置’語句來導入和使用該程序中shelve模塊的所有功能。為了理解shelve模塊的工作,我們將它的實現部分分成三個部分,首先我們創建一個擱置文件並在其中存儲數據,其次,我們打開文件並從中檢索值,最後,我們更新擱置文件中的數據。我們將通過以下三個步驟學習shelve模塊的工作和實施:

  • 創建一個擱置文件來存儲數據
  • 從擱置文件中檢索數據
  • 更新擱置文件中的數據

我們將通過使用一個示例程序來了解上述三個部分中的每一個,在該示例程序中,我們使用shelve模塊的功能來執行各自的任務。現在,讓我們通過首先創建一個示例擱置文件來學習shelve模塊工作的每個部分的實現。

創建用於存儲數據的擱置文件:

如果我們想在擱置文件中存儲一些數據,我們必須先創建一個,然後才能添加所需的數據。我們可以通過簡單地使用其 open() 函數來創建一個擱置文件,該函數的工作方式類似於我們在文件處理過程中使用的 open()函數。使用shelve模塊的 open() 功能,我們必須遵循下面給出的語法來打開或創建新的擱置文件:


>> shelve = open(NameOfFile, flag = 'c', protocol = None, writeback = True)

它將返回一個來自 DbfilenameShelf 子類的盤架對象,該對象將從用戶那裡收集數據並存儲在文件中。以下是上面給出的 open() 函數語法中使用的參數描述:

  • 名稱文件:它是我們想要或已經分配給數據庫(擱置文件)的文件的名稱,我們正在使用 open() 創建/打開該數據庫
  • 標誌:**open()**函數語法的標誌參數是 c、w、n 和 r,其中“c”是默認的。flag 參數中的“c”關鍵字表示我們給予了該文件的讀寫訪問權限,“w”表示我們給予了只寫訪問權限,“r”表示我們只給予了讀訪問權限,“n”表示我們正在創建一個名為 NameOfFile 的新文件。
  • 寫回:默認情況下,寫回參數為 false,但是如果我們將該參數設置為 true,我們在擱置文件中給出的條目將緩存在程序的緩存內存中。
  • 協議:函數中的協議參數表示條目的 pickle 協議。

由於現在我們已經學習了shelve模塊的 open() 函數的參數和語法,現在是時候在一個示例程序中使用這個函數來理解它的實現了。

例 1:

看看下面的 Python 程序,我們在其中創建了一個擱置文件,並將數據存儲在該文件中:


# Importing the Shelve Module
import shelve
# Creating a shelve file with open() function
shelveVariable = shelve.open("SampleFile")
print("A Shelve file with SampleFile name is successfully created")
# Making entries inside the shelve file
shelveVariable['Employee Name'] = 'Jackie Chan'
shelveVariable['Employee Age'] = 27
shelveVariable['Employee department'] = Management
shelveVariable['Employee Performance'] = Excellent
shelveVariable['Employee Score'] = 9.2
shelveVariable.close()
print("All entries are successfully made inside the sample shelve file")

輸出:

A Shelve file with SampleFile name is successfully created
All entries are successfully made inside the sample shelve file

說明:

我們首先在示例程序中導入了shelve模塊,這樣我們就可以使用它的 open() 函數來創建一個示例擱置文件。然後,我們在初始化的擱置變量中使用 open() 函數來進一步將其用於條目,並創建了一個名為“樣本文件”的樣本擱置文件。然後,我們使用初始化的擱置變量在我們創建的示例擱置文件中創建條目,並使用字典方法在其中創建多個條目。我們使用初始化的變量在單獨的列中創建了多個條目,最後,我們使用 close() 函數將這些條目保存在文件中。

當我們運行上面給出的示例程序時,將在我們的設備中創建一個帶有“SampleFile.dir”的擱置文件,並在其中創建條目。

注意:每次我們訪問系統中的擱置文件時,sync()和 close()操作都會隨之執行,這可能會降低整個過程的速度。

shelve模塊中的方法:

在上面的例子中,我們使用了 open() 方法來創建數據庫擱置文件,但是這不是shelve模塊中存在的唯一方法。shelve模塊為我們提供了很多不同的方法,這些方法中的每一個都有不同的功能,這對我們非常有用。

貨架模塊中有以下各種類型的方法:

| 不,先生 | 方法名 | 方法描述 |
| one | get() | 此方法將返回與數據庫文件中存在的鍵(在方法中作為參數提供)相關聯的值。 |
| Two | 按鍵() | Keys()方法用於返回擱置文件中存在的所有鍵的名稱(我們在方法中提供了該名稱作為參數)。 |
| three | 值() | values()方法的工作方式與shelve模塊的 key()方法非常相似,因為它返回擱置文件中存在的值。 |
| four | 項目() | 如果我們想在一次調用中同時從擱置文件中獲取鍵和值,我們可以通過在方法中提供擱置文件的名稱作為參數來使用 items()方法。 |
| five | 關閉() | close 方法首先同步我們為擱置文件提供的項目,然後它關閉持久 dict 對象,我們在打開/創建擱置文件時初始化了該對象。 |
| six | 更新() | 如果我們想更新擱置文件並添加更多條目,我們可以使用 update()方法來完成同樣的操作。 |
| seven | 流行音樂() | pop()方法與 update()方法完全相反,因為它用於從擱置文件中移除條目(鍵和值與之類似)。 |
| eight | 同步() | 每當我們在打開擱置文件時將寫回設置為 True 時,sync()方法用於將所有條目寫回程序的緩存中。 |

我們可以使用shelve模塊的所有方法對我們創建的數據庫擱置文件執行各種功能,我們將在後面的示例中使用其中的一些方法。

從擱置文件中檢索數據:

在創建一個擱置文件並在這個文件中輸入數據後,我們要做的第一件事是檢查是否所有的條目都成功地輸入到文件中。最好的檢查方法是在輸出中打印所有這些條目,並查看是否打印了所有條目。當我們不知道擱置文件中有什麼數據時,這個方法也很有用(比如有人在我們的擱置文件上工作,或者我們在別人的擱置文件上工作)。我們可以通過許多方法從擱置中訪問數據,如 get()、values()、items()和 key()。所有這些方法的工作方式非常不同,返回的數據相同,但形式不同,因此我們將使用它們中的每一個從我們在示例 1 中創建的示例擱置文件中返回數據。

(i)通過 get()方法獲取單個值:

我們可以通過在 get() 方法中提供一個鍵來直接打印特定鍵的值,為了理解這個方法,我們將在一個示例程序中使用它。

例 2:


# Importing the Shelve Module
import shelve
# Opening the sample shelve file with open() function
shelveVariable = shelve.open("SampleFile")
# Print data entries from the sample shelve file in the output
print("Name of Employee in the file: ", shelveVariable['Employee Name'])
print("Age of Employee: ", shelveVariable['Employee Age'])
print("Department of Employee: ", shelveVariable['Employee department'])
print("Score of Employee: ", shelveVariable['Employee Score'])

輸出:

Name of Employee in the file:  Jackie Chan
Age of Employee:  27
Department of Employee:  Management
Score of Employee:  9.2

正如我們所看到的,在輸出中會打印出在 get() 方法中給出的具有相應鍵的數據值。

(ii)從擱置文件中一次性獲取所有項目:

如果我們想一次從擱置文件中檢索所有項目,我們可以對擱置對象使用 items() 方法,它將在輸出中返回樣本擱置文件中存在的所有項目。我們將使用下面的示例程序來理解這個方法的實現:

例 3:


# Importing the Shelve Module
import shelve
# Opening the sample shelve file with open() function
shelveVariable = shelve.open("SampleFile")
# Print all data entries from the sample shelve file in list form
print("Items in the sample shelve file: ", list(shelveVariable.items()))

輸出:

Items in the sample shelve file:  [('Employee Name', 'Jackie Chan'), ('Employee Age', 27), ('Employee department', 'Management'), ('Employee Performance', 'Excellent'), ('Employee Score', 9.2)]

正如我們在輸出中看到的,當我們使用 items() 函數時,樣本文件中存在的所有項目都被打印出來。

(iii)僅從擱置文件中檢索密鑰:

如果我們想只打印樣本擱置文件中存在的鍵,可以在打開擱置文件後,在程序內部使用鍵()方法。

例 4:


# Importing the Shelve Module
import shelve
# Opening the sample shelve file with open() function
shelveVariable = shelve.open("SampleFile")
# Print only keys from the sample shelve file in the output
print("Keys in the sample shelve file: ", list(shelveVariable.keys()))

輸出:

Keys in the sample shelve file:  ['Employee Name', 'Employee Age', 'Employee department', 'Employee Performance', 'Employee Score']

使用鍵()方法在輸出中打印樣本架文件中存在的所有鍵。

(iv)僅從擱置文件中檢索值:

這個方法及其實現的工作方式與之前使用key()函數的方法完全一樣,但是這裡我們必須使用 values() 函數來打印擱置文件中的所有值。

例 5:


# Importing the Shelve Module
import shelve
# Opening the sample shelve file with open() function
shelveVariable = shelve.open("SampleFile")
# Print only values from the sample shelve file in the output
print("Values in the sample shelve file: ", list(shelveVariable.values()))

輸出:

Values in the sample shelve file:  ['Jackie Chan', 27, 'Management', 'Excellent', 9.2]

使用鍵()方法將樣本架文件中的所有值打印在輸出中。

更新擱置文件中的數據:

我們甚至可以更新擱置文件中已經存在的數據,在這個方法中,我們可以執行三個任務,但是這裡我們將只執行兩個。首先,我們可以更新文件中已經存在的鍵值;第二,我們可以添加新條目;最後,我們可以從文件中刪除一個條目。如果我們想將與一個鍵相關聯的當前值更新為一個新值,我們必須用 key 對象寫入新值,並且程序將在該鍵中分配新值。

(i)在擱置文件中添加新條目:

如果我們想添加新條目,我們首先必須在程序中定義一個字典變量,然後我們可以用鍵值對在那裡編寫新條目。之後,我們可以通過在方法中提供字典變量的名稱作為參數來使用 update() 方法,它會在文件中添加新的條目。

例 6:


# Importing the Shelve Module
import shelve
# Opening the sample shelve file with open() function
shelveVariable = shelve.open("SampleFile")
# Adding new fields inside the sample shelve file
sampleDict = {'Employee Salary' : 50000, 'Employee Sub-department' : 'Field Work'}
shelveVariable.update(sampleDict)
# Print data entries from the sample shelve file in list form
print("Items in the sample shelve file: ", list(shelveVariable.items()))

輸出:

Items in the sample shelve file:  [('Employee Name', 'Jackie Chan'), ('Employee Age', 27), ('Employee department', 'Management'), ('Employee Performance', 'Excellent'), ('Employee Score', 9.2), ('Employee Salary', 50000), ('Employee Sub-department', 'Field Work')]

正如我們所看到的,當我們打印示例擱置文件中的所有項目時,新項目也出現了,這意味着文件中有了新條目。

(ii)從擱置文件中刪除條目:

如果我們想刪除文件中已經存在的條目,我們可以使用 pop() 方法。我們必須在函數中寫入鍵名,它將從擱置文件中移除與之關聯的鍵和值。我們可以通過打印擱置文件中的所有項目來驗證這一點。

例 7:


# Importing the Shelve Module
import shelve
# Opening the sample shelve file with open() function
shelveVariable = shelve.open("SampleFile")
# Delete a field from the shelve file
shelveVariable.pop('Employee Performance')
# Print data entries from the sample shelve file in list form
print("Items in the sample shelve file: ", list(shelveVariable.items()))

輸出:

Items in the sample shelve file:  [('Employee Name', 'Jackie Chan'), ('Employee Age', 27), ('Employee department', 'Management'), ('Employee Score', 9.2), ('Employee Salary', 50000), ('Employee Sub-department', 'Field Work')]

如我們所見,員工績效鍵值條目不在輸出中,因為我們已經通過 pop() 方法刪除了它。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246980.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:18
下一篇 2024-12-12 13:18

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論