numpy 我如何知道.npz文件是否被压缩?

bgtovc5b  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(97)

给定一个来自np.saveznp.savez_compressed的.npz文件,当它被np.load加载时,有没有办法检查文件是否被压缩?
我试着看了docs和GitHub。它只告诉我文件是如何压缩的。

6yt4nkrj

6yt4nkrj1#

np.load返回NpzFile对象。

  • 它有一个zip属性,这是一个ZipFile对象。
  • 它有一个infolist()方法,该方法返回ZipInfo对象的列表。
  • 它有一个compress_type属性,其中包含使用的压缩方法。

如果使用np.savez,则压缩类型为ZIP_STORED,如果使用np.savez_compressed,则压缩类型为ZIP_DEFLATED(相关源代码)。
总结一下:

import numpy
import zipfile

def is_compressed(npz_file):
    zip_infos = npz_file.zip.infolist()
    if len(zip_infos) == 0:
        raise RuntimeError("Did not find ZipInfos unexpectedly")
    compress_type = zip_infos[0].compress_type
    if compress_type == zipfile.ZIP_STORED:
        return False
    elif compress_type == zipfile.ZIP_DEFLATED:
        return True
    else:
        raise ValueError("Unexpected compression type")

# Example
a = numpy.array([1, 2, 3])
numpy.savez("uncompressed.npz", a)
numpy.savez_compressed("compressed.npz", a)
u = numpy.load("uncompressed.npz")
c = numpy.load("compressed.npz")
print(is_compressed(u))  # False
print(is_compressed(c))  # True

字符串

相关问题