科学计算, 生活

常见的科研数据保存格式

这是之前的一篇:科研中常用的图片保存格式。本篇主要介绍数字、字符串、列表、字典等数据类型的保存格式。常见的格式有: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()
7 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code