这是之前的一篇:科研中常用的图片保存格式。本篇主要介绍数字、字符串、列表、字典等数据类型的保存格式。常见的格式有:TXT, JSON, CSV, Pickle, HDF5, SQLite 等。
1. TXT(文本格式,可直接阅读)
- 优点: 极度灵活,任何文本信息都能存储;通用性最强。
- 缺点: 没有内置结构,需要自己定义和解析格式。
- 适用场景: 日志文件、配置文件、非结构化文本。
Python 操作:
# 写入
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('test_1\ntest_2')
# 读取
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read() # 读取全部内容
print(content)
with open('data.txt', 'r', encoding='utf-8') as f:
lines = f.readlines() # 或按行读取
print(lines)
for line in lines:
print(line.strip()) # strip() 去除首尾空白字符
2. JSON(文本格式,可直接阅读)
- 优点: 人类可读;良好的结构化,支持嵌套(字典、列表);几乎所有编程语言都支持。
- 缺点: 冗余度比二进制格式高;默认不支持注释(虽然有些解析器允许)。
- 适用场景: 配置文件、Web API 数据传输、中小型结构化数据。
Python 操作:
import json
data = {
"name": "Guan",
"year": 1993,
"hobbies": ["coding", "reading"],
}
# 写入
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4) # indent 使输出格式化,更易读
# 读取
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print(loaded_data)
print(loaded_data['name'])
3. CSV(文本格式,可直接阅读)
- 优点: 纯文本,人类可读;几乎所有数据处理工具和编程语言都支持;体积小。
- 缺点: 没有标准规范(如分隔符、转义符);不支持数据类型(所有内容都是字符串);不支持层次结构。
- 适用场景: 表格数据的导入导出,与 Excel 等电子表格程序交换数据。
Python 操作:
import csv
# 写入 CSV
with open('data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['Name', 'year', 'value']) # 写入表头
writer.writerow(['Guan', 1993, 1])
writer.writerow(['G123', 2025, 0])
# 读取 CSV
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row) # 每行是一个列表
4. Pickle(二进制格式)
- 优点: Python 专属,可以序列化几乎任何 Python 对象(函数、类实例等);使用方便;二进制格式,效率较高。
- 缺点: 安全性风险(绝不能反序列化不受信任的来源);仅限 Python;不同 Python 版本间可能不兼容。
- 适用场景: 临时保存 Python 计算中间结果;将训练好的机器学习模型序列化;进程间通信。
Python 操作:
import pickle
data = [1, 2, 3]
# 写入
with open('data.pkl', 'wb') as f: # 注意是 'wb' 二进制写入
pickle.dump(data, f)
# 读取
with open('data.pkl', 'rb') as f: # 注意是 'rb' 二进制读取
loaded_data = pickle.load(f)
print(loaded_data)
5. HDF5(二进制格式)
- 优点: 专为存储海量数值数据设计;支持高效压缩,节省空间和 IO 时间;支持分块存储,可部分读取;类文件系统的层次结构(/group/dataset)。
- 缺点: 非人类可读;需要专门的库(如 h5py);不是通用数据交换格式。
- 适用场景: 科学计算领域的大型矩阵、数值数据集、神经网络模型权重、传感器数据。
在 Python 中需要安装 h5py 库:pip install h5py
Python 操作:
import h5py
import numpy as np
# 写入数据
with h5py.File('data.h5', 'w') as f:
f.create_dataset('array', data=np.random.rand(3, 3))
f.attrs['info'] = '3x3随机矩阵'
# 读取数据
with h5py.File('data.h5', 'r') as f:
array_data = f['array'][:]
info = f.attrs['info']
print('数组数据:')
print(array_data)
print('信息:', info)
6. SQLite(混合型)
SQLite 操作比较复杂,它是一个完整的、自包含的、数据库引擎。它的存储格式是二进制的,交互方式是文本式的(SQL 命令)。
- 优点: 无需单独数据库服务器,单文件数据库;支持 SQL,具备关系型数据库的所有功能(事务、并发、复杂查询等)。
- 缺点: 需要学习 SQL;不如平面文件直观。
- 适用场景: 替代多个 CSV 文件;需要复杂查询、索引、事务支持的中小型应用。
Python 操作:
import sqlite3
# 1. 连接数据库(自动创建)
conn = sqlite3.connect('data.db')
cursor = conn.cursor()
# 2. 创建表
cursor.execute('CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)')
# 3. 插入数据
cursor.execute("INSERT INTO users VALUES ('张三', 25)")
cursor.execute("INSERT INTO users VALUES ('李四', 30)")
# 4. 提交更改
conn.commit()
# 5. 读取数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
print("所有用户数据:")
for row in rows:
print(f"姓名: {row[0]}, 年龄: {row[1]}")
# 6. 关闭连接
conn.close()
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】