如何在Python中使用文本数据库

372 阅读8分钟

如何在Python中使用文本数据库

储存数据的主要方式之一是使用数据库。数据库是一个数据的集合,它以一种更容易访问和操作的方式组织起来。

虽然数据库经常被用来存储数据,但它们并不是存储数据的唯一方式。你可以在文件中以结构化的方式存储数据。该文件将允许你写入和检索数据,以便在你的程序中使用。一些最常用的文件是文本文件JSON文件。

使用.txt文件作为数据库

文本文件是当今世界上使用最多的文件格式之一。使用文本文件的主要原因之一是其简单性。文本文件不需要任何特殊的软件来使用。它们甚至不需要任何格式化知识,不像数据库那样。

文本文件可用于存储各种数据。大多数情况下,它们被用来存储不需要特殊格式化的简单文本。例如,文本文件可以用来导出姓名、电子邮件或两者的组合的列表。

使用write()将数据写到一个文本文件中

在 Python 中,读和写文本文件是默认支持的,不需要额外的库。

为了演示我们如何使用文本文件来存储数据,让我们建立一个简单的程序,将雇员名单存储在一个文本文件中。在你的机器上的某个地方创建一个新的文件app.py ,并在你的代码编辑器上打开它。

添加以下代码。

employees = ['John', 'Mary', 'Bob', 'Jane']

file = open('employees.txt', "a")

for employee in employees:
    file.write(employee + '\n')

file.close()

我们首先创建一个包含雇员姓名的列表。然后,我们打开一个名为employees.txt 的文件。值得注意的是,如果一个同名的文件已经存在,项目将被附加到它上面。如果它不存在,将创建一个新的文件。

然后我们循环浏览列表,用write() 方法将每个雇员的名字写入文件。我们使用\n ,用一个新行来分隔每个雇员的名字。最后,我们关闭该文件。

使用 writelines() 将数据写入文本文件

writelines() 方法与write() 方法类似,只是它需要一个字符串列表作为参数。

为了演示它是如何工作的,请运行下面的代码。

items = ['John', 'Mary', 'Bob', 'Jane']
employees = []

def separator(list):
    for item in list:
        item += '\n'
        employees.append(item)

separator(items)

file = open('employees.txt', "w")

file.writelines(employees)
file.close()

我们使用separator 函数为列表中的每一项附加一个换行符(/n)。然后,我们在写模式下打开一个名为employees.txt 的文件(w),并将雇员列表写入该文件中。每次我们运行程序时,该文件都会被覆盖(现有内容被清除,然后写入新内容)。

使用read()从文本文件中读取数据

要从一个文本文件中读取数据,我们使用read() 方法。该方法返回一个包含文件内容的字符串。

file = open('employees.txt', "r")
content = file.read()

print("content type: " + type(content).__name__ + "\n")
print(content)

file.close()

我们以读取模式打开文件(r),然后打印文件的内容。我们使用type() 方法来获得内容的类型。我们可以看到,该内容是一个字符串。

当我们打印该内容时,它被分成了多行。这是由于我们在写文件时附加了\n 字符。使用read() 方法并不是读取文件的最好方法。这是因为大多数时候,你需要在程序的某个地方使用文件内容。

为了解决这个问题,我们可以使用readlines() 方法。

使用readlines()从一个文本文件中读取数据

readlines() 方法返回一个字符串的列表,每个字符串代表文件中的一行。

file = open('employees.txt', "r")
content = file.readlines()

print("content type: " + type(content).__name__ + "\n")

for line in content:
    print(line.strip())

file.close()

我们使用readlines 方法来获得文件中的行的列表。我们循环浏览这个列表,打印每一行。strip() 方法从每一行的末尾删除换行符。为了在你的程序中使用这些行的内容,你现在可以将这些项目添加到一个列表中。

file = open('employees.txt', "r")
content = file.readlines()

employees = []

for line in content:
    name = line.strip()
    employees.append(name)

print(employees)

file.close()

我们循环浏览列表,将每一行添加到employees 列表中。现在你可以在你的程序中使用这个列表。这个实现是非常基本的。假设你想在一个文本文件中存储对象。你会怎么做呢?

在文本文件中存储对象

为了在文本文件中存储对象,我们需要在将它们写入文件之前将它们转换为字符串。

employees = [
    {'name': 'John', 'age': 30},
    {'name': 'Mary', 'age': 25},
    {'name': 'Bob', 'age': 40},
    {'name': 'Jane', 'age': 45}
]

file = open('employees.txt', "a")

for employee in employees:
    string = "{name}||{age}\n".format(**employee)

    file.write(string)

file.close()

我们首先创建一个包含雇员的字典列表。然后,我们循环浏览这个列表,为每个雇员创建一个字符串。我们使用format() 方法和** 操作符,分别创建字符串和解压字典。现在让我们把这个字符串转换回它的原始形式。

从文本文件中读取对象

为了取回我们的原始对象,我们必须逐行读取文件。然后,我们可以使用split() 方法将字符串分割成一个字符串的列表。

file = open('employees.txt', "r")
content = file.readlines()

employees = []

for line in content:
    name, age = line.strip().split('||')

    employees.append({'name': name, 'age': int(age)})

print(employees)

file.close()

我们循环浏览内容列表,并将每一行分成两个变量nameage 。然后我们将这两个变量转换为一个字典,并将其追加到employees 列表中。现在你可以在你的程序中使用这个列表。

要使用文本文件建立、存储和读取大型结构,你可以考虑使用pickle 模块。它提供了一种将 Python 对象序列化和反序列化以存储在文件中的方法。

如果使用文本文件对你来说感觉有点乱,你可以考虑使用JSON文件。

使用JSON文件作为数据库

JSON是一种人类可读的数据格式,易于阅读,而且几乎所有主要的编程语言都原生支持。在Python中,我们可以使用json 模块来处理JSON文件。json 模块提供了读取和写入JSON文件的简单方法。JSON以键值对的格式存储数据。

下面是一个JSON对象的例子。

{
    "name": "John",
    "age": 30,
    "is_developer": true
}

为了演示我们如何向JSON文件写入,请运行下面的代码。

import json

employees = [
    {
        "name": "Carol",
        "age": 30,
        "is_developer": True
    },
    {
        "name": "Erastus",
        "age": 30,
        "is_developer": False
    }, {
        "name": "Eric",
        "age": 20,
        "is_developer": True
    }
]

json_obj = json.dumps(employees, indent=4)

file = open("employees.json", "w")
file.write(json_obj)

file.close()

我们需要创建employees 词典的列表。然后我们使用json.dumps() 方法将该列表转换为JSON字符串。然后我们把JSON字符串写到一个文件中。我们使用indent=4 参数来格式化JSON字符串。

为了读取JSON文件,我们使用json.loads() 方法,将JSON字符串转换为字典的列表。

在编写JSON文件时,有必要使用indent=4 参数。这将使JSON文件可以被人类阅读。

import json

file = open("employees.json", "r")

content = file.read()
employees = json.loads(content)

for employee in employees:
    print(employee['name'])

file.close()

我们以读取模式打开文件并读取内容。然后我们使用json.loads() 方法将JSON字符串转换为一个字典列表。最后我们在列表中进行循环,在关闭文件前打印出每个雇员的名字。

更新一个JSON文件

要更新一个JSON文件,我们必须首先读取文件,更新文件内容,然后将更新的内容写回文件。让我们在文件中添加一个新的雇员。

import json

file = open("employees.json", "r")

content = file.read()
employees = json.loads(content)

another_employee = {
    "name": "Jeff",
    "age": 12,
    "is_developer": True
}

employees.append(another_employee)

json_obj = json.dumps(employees, indent=4)

file = open("employees.json", "w")
file.write(json_obj)

file.close()

我们首先读取文件的内容。使用json.loads() 方法,我们将JSON字符串转换为一个字典的列表。然后我们在列表中添加一个新的雇员。最后我们将更新后的雇员列表写回文件中。

总结

文本文件可以有多种用途。你可以用它们来存储简单的文本,甚至是结构化的数据。你可以对文本文件进行解析,得到结构化的数据,以便在你的程序中使用。

值得注意的是,当解析整数时,你必须使用str() 方法将它们转换回整数。JSON文件可以用来以人类可读的格式存储结构化数据。它们不需要解析,因为json 模块提供了一个简单的方法来读和写JSON文件。

同样重要的是要注意,当你与高速应用程序一起工作时,你不能依赖这些文件。在这种情况下,数据库将是最佳选择。