【Python】pkl、npz、parquet文件格式

.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)
    

总结对比

格式用途特点常见工具/库
.pklPython 对象序列化Python 原生支持,灵活但可能存在安全风险pickle 模块
.npzNumPy 数组存储支持多数组压缩存储,适合科学计算NumPy (numpy.savez)
.parquet大数据分析和高效存储列式存储,支持压缩,适合大数据场景Pandas、PyArrow、Spark

如何选择?

  1. 如果需要保存 Python 对象(如字典、列表、模型等):使用 .pkl
  2. 如果需要保存多个 NumPy 数组(如科学计算中的矩阵):使用 .npz
  3. 如果需要高效存储和分析大规模表格型数据(如 CSV 替代方案):使用 .parquet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值