You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Python 2生成.npz/.npy文件时的额外头解析警告?

解决Python 2生成npz/npy文件的头解析警告问题

问题背景

在Python 2环境中手动打包生成包含.npy文件的.npz文件,使用Python 3读取时会触发以下警告:

UserWarning: Reading .npy or .npz file required additional header parsing as it was created on Python 2. Save the file again to speed up loading and avoid this warning.

需求是在Python 2中直接生成无需额外头解析的兼容文件,规避该警告。

原因分析

Python 2与Python 3的字符串编码模型存在差异(bytes/unicode区分),手动调用np.lib.npyio.format.write_array生成的.npy文件头会保留Python 2的格式特征,导致Python 3读取时需要额外解析。而numpy内置的文件保存函数会自动处理跨版本兼容问题。

解决方案

方案1:改用numpy内置的savez_compressed(推荐)

无需手动操作zip包,直接用numpy提供的函数生成兼容的压缩npz文件:

import numpy as np

array = [1,2,3]
# 直接生成兼容Python 3的压缩npz文件
np.savez_compressed("myFile.npz", myFile=np.array(array))

方案2:保留手动打包逻辑,改用np.save生成.npy内容

如果必须手动处理zip包,将原代码中的write_array替换为np.save,并确保启用fix_imports=True(Python 2中默认生效):

import zipfile
import io
import numpy as np   

array = [1,2,3]
with zipfile.ZipFile("myFile.npz", 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True) as zipf:
    buf = io.BytesIO()
    # 用np.save自动处理跨版本兼容的头信息
    np.save(buf, np.array(array), fix_imports=True)
    buf.seek(0)  # 重置文件指针到开头
    zipf.writestr("myFile.npy", buf.getvalue())

原理说明

np.save和np.savez系列函数通过fix_imports参数,在Python 2环境中生成文件时会自动调整数据头的格式,将Python 2特有的类型标识转换为Python 3可直接识别的格式,从而避免读取时的额外解析操作。

内容的提问来源于stack exchange,提问作者Avatar36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:59:59