.pkl
、.npz
和 .parquet
是三种常见的文件格式,分别用于不同的数据存储和序列化场景。以下是它们的详细说明:
1. .pkl (Pickle File)
- 用途:
.pkl
文件是由 Python 的pickle
模块生成的序列化文件,用于保存 Python 对象(如字典、列表、模型等)到磁盘。 - 特点:
- 优点:
- Python 原生支持,适合保存复杂的 Python 数据结构。
- 可以保存机器学习模型(如 scikit-learn、TensorFlow 等)。
- 缺点:
- 不跨语言,其他编程语言无法直接读取。
- 存在安全风险,加载不受信任的
.pkl
文件可能导致代码执行漏洞。
- 优点:
- 示例代码:
import pickle# 写入 .pkl 文件 with open('data.pkl', 'wb') as f:pickle.dump(data, f)# 读取 .pkl 文件 with open('data.pkl', 'rb') as f:data = pickle.load(f)
2. .npz (NumPy Zipped Archive)
- 用途:
.npz
文件是 NumPy 提供的一种压缩存档格式,用于存储多个数组或矩阵。 - 特点:
- 优点:
- 支持同时存储多个数组,并且可以压缩以节省空间。
- 高效处理数值数据,特别适合科学计算。
- 缺点:
- 主要适用于 NumPy 数组,不适合其他类型的数据。
- 优点:
- 示例代码:
import numpy as np# 创建一些数组 array1 = np.array([1, 2, 3]) array2 = np.array([4, 5, 6])# 写入 .npz 文件 np.savez('arrays.npz', array1=array1, array2=array2)# 读取 .npz 文件 data = np.load('arrays.npz') print(data['array1']) # 访问存储的数组 print(data['array2'])
3. .parquet (Parquet File)
- 用途:
.parquet
是一种高效的列式存储文件格式,广泛用于大数据处理和分析(如 Apache Spark、Pandas、Dask 等)。 - 特点:
- 优点:
- 列式存储适合数据分析任务,尤其是对部分列的操作。
- 支持高效压缩,节省存储空间。
- 支持 Schema(数据结构定义),便于管理复杂数据。
- 缺点:
- 更适合表格型数据,不适用于非结构化数据。
- 优点:
- 示例代码:
import pandas as pd# 创建一个 DataFrame df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 写入 .parquet 文件 df.to_parquet('data.parquet')# 读取 .parquet 文件 df = pd.read_parquet('data.parquet') print(df)
总结对比
格式 | 用途 | 特点 | 常见工具/库 |
---|---|---|---|
.pkl | Python 对象序列化 | Python 原生支持,灵活但可能存在安全风险 | pickle 模块 |
.npz | NumPy 数组存储 | 支持多数组压缩存储,适合科学计算 | NumPy (numpy.savez ) |
.parquet | 大数据分析和高效存储 | 列式存储,支持压缩,适合大数据场景 | Pandas、PyArrow、Spark |
如何选择?
- 如果需要保存 Python 对象(如字典、列表、模型等):使用
.pkl
。 - 如果需要保存多个 NumPy 数组(如科学计算中的矩阵):使用
.npz
。 - 如果需要高效存储和分析大规模表格型数据(如 CSV 替代方案):使用
.parquet
。