首页 > 编程知识 正文

Python shelve模块

时间:2023-11-26 13:13:14 阅读:309416 作者:MITS

我们在日常生活中都遇到过很多这样的情况,我们必须使用数据库管理系统来存储所有需要的信息和数据。使用数据库管理系统通常非常简单,但是当我们必须存储一些复杂的结构化数据时,有时会变得有点困难。数据库管理系统有各种各样的类型,但是我们在日常生活中通常使用的最常见的类型是关系数据库管理系统。关系数据库管理系统是一个有效的工具和管理系统,我们可以在其中存储所有必要的信息和数据,并非常容易地管理它们。在很多情况下,我们不必使用关系数据库管理系统,或者不可能使用关系数据库管理系统来存储数据。在这种情况下,我们会想到一些问题:在这种情况下,是否有其他选择,是否有其他方法或工具来存储数据等。

这些问题的答案是肯定的!当我们不需要使用关系数据库管理系统方法时,我们有其他工具和方法来存储数据。我们还有其他工具,其中许多工具都与编程语言库相关联。这意味着,在编程世界中,当使用关系数据库管理系统不是一个选项时,有一些库提供了有效的工具来使用。这个东西也适用于 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() 方法删除了它。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。