在 Python 中存储简单数据时,我们希望能够将数据存储为纯文本文件,这样每行都是一个数组的字符串表示,并且易于解析。我们尝试过以下方法:
array.toFile()方法,但无法弄清楚如何在嵌套字符串数组中使用它,它似乎只适用于整数数据。- 列表和集合没有内置的
toFile()方法,因此我们必须手动解析和编码它。 - CSV 似乎是一个不错的方法,但这也需要手动解析,而且它不允许我们简单地在末尾追加新行 - 因此任何对
CSVWriter的新调用都会覆盖文件中的现有数据。
我们希望避免使用数据库(也许是 SQLite),因为我们希望在开发中除了 Python 之外没有其他软件先决条件。
2、解决方案
1)pickle
Pickle 是 Python 中内置的一个序列化模块,可以将对象序列化为字节流,然后存储在文件中。需要使用时,可以将字节流反序列化为对象。Pickle 模块使用的是二进制格式,所以只有 Python 程序才能读取和写入 Pickle 文件。
2)json
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于文本,易于阅读和理解。JSON 模块是 Python 中内置的一个 JSON 编码器和解码器,可以使用它将 Python 对象编码为 JSON 字符串,然后存储在文件中。需要使用时,可以将 JSON 字符串解码为 Python 对象。JSON 格式是跨语言的,所以可以使用任何语言的 JSON 解析器来读取和写入 JSON 文件。
3)csv
CSV (Comma-Separated Values) 是一种简单的数据存储格式,它将数据存储为纯文本文件,每行都是一个逗号分隔的字符串。CSV 模块是 Python 中内置的一个 CSV 读写器,可以使用它将 Python 对象编码为 CSV 字符串,然后存储在文件中。需要使用时,可以将 CSV 字符串解码为 Python 对象。CSV 格式是跨语言的,所以可以使用任何语言的 CSV 解析器来读取和写入 CSV 文件。
4)YAML
YAML (YAML Ain't Markup Language) 是一种简单的人类可读的数据格式,它基于文本,易于阅读和理解。YAML 模块是 Python 中的一个 YAML 编码器和解码器,可以使用它将 Python 对象编码为 YAML 字符串,然后存储在文件中。需要使用时,可以将 YAML 字符串解码为 Python 对象。YAML 格式是跨语言的,所以可以使用任何语言的 YAML 解析器来读取和写入 YAML 文件。
5)SQLite
SQLite 是一个轻量级的嵌入式数据库,它不需要单独的服务器进程,只需要一个库文件即可。SQLite 模块是 Python 中内置的一个 SQLite 驱动程序,可以使用它来连接到 SQLite 数据库,并对数据库进行操作。SQLite 数据库的文件是跨平台的,所以可以在任何平台上读取和写入 SQLite 数据库文件。
代码例子
以下是一个使用 Pickle 模块存储和读取数据的代码示例:
import pickle
# 创建一个列表
data = [1, 2, 3, 4, 5]
# 将列表序列化为字节流
bytes_data = pickle.dumps(data)
# 将字节流存储在文件中
with open('data.pkl', 'wb') as f:
f.write(bytes_data)
# 从文件中读取字节流
with open('data.pkl', 'rb') as f:
bytes_data = f.read()
# 将字节流反序列化为列表
data = pickle.loads(bytes_data)
# 打印列表
print(data)
以下是一个使用 JSON 模块存储和读取数据的代码示例:
import json
# 创建一个列表
data = [1, 2, 3, 4, 5]
# 将列表编码为 JSON 字符串
json_data = json.dumps(data)
# 将 JSON 字符串存储在文件中
with open('data.json', 'w') as f:
f.write(json_data)
# 从文件中读取 JSON 字符串
with open('data.json', 'r') as f:
json_data = f.read()
# 将 JSON 字符串解码为列表
data = json.loads(json_data)
# 打印列表
print(data)
以下是一个使用 CSV 模块存储和读取数据的代码示例:
import csv
# 创建一个列表
data = [1, 2, 3, 4, 5]
# 将列表编码为 CSV 字符串
csv_data = ','.join(map(str, data))
# 将 CSV 字符串存储在文件中
with open('data.csv', 'w') as f:
f.write(csv_data)
# 从文件中读取 CSV 字符串
with open('data.csv', 'r') as f:
csv_data = f.read()
# 将 CSV 字符串解码为列表
data = list(map(int, csv_data.split(',')))
# 打印列表
print(data)
以下是一个使用 YAML 模块存储和读取数据的代码示例:
import yaml
# 创建一个列表
data = [1, 2, 3, 4, 5]
# 将列表编码为 YAML 字符串
yaml_data = yaml.dump(data)
# 将 YAML 字符串存储在文件中
with open('data.yaml', 'w') as f:
f.write(yaml_data)
# 从文件中读取 YAML 字符串
with open('data.yaml', 'r') as f:
yaml_data = f.read()
# 将 YAML 字符串解码为列表
data = yaml.load(yaml_data)
# 打印列表
print(data)
以下是一个使用 SQLite 模块存储和读取数据的代码示例:
import sqlite3
# 创建一个 SQLite 数据库连接
conn = sqlite3.connect('data.db')
# 创建一个游标
cursor = conn.cursor()
# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS data (id INTEGER PRIMARY KEY, value TEXT)''')
# 插入数据
for i in range(1, 6):
cursor.execute('''INSERT INTO data (value) VALUES (?)''', (i,))
# 提交事务
conn.commit()
# 查询数据
cursor.execute('''SELECT value FROM data''')
# 打印数据
for row in cursor.fetchall():
print(row[0])
# 关闭游标和数据库连接
cursor.close()
conn.close()