如何在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()
我们循环浏览内容列表,并将每一行分成两个变量name 和age 。然后我们将这两个变量转换为一个字典,并将其追加到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文件。
同样重要的是要注意,当你与高速应用程序一起工作时,你不能依赖这些文件。在这种情况下,数据库将是最佳选择。