在 zipfile 中的文件上使用 numpy.load

Sig*_*mun 3 python numpy zipfile

我有一个包含许多NPY文件的压缩文件(file1.npyfile2.npyfile3.npy,...)。我想单独加载它们而不在文件系统上提取 zipfile。我已经尝试了很多东西,但我无法弄清楚。

我的猜测是:

import zipfile
import numpy as np

a = {}

with zipfile.ZipFile('myfiles.zip') as zipper:
    for p in zipper.namelist():
        with zipper.read(p) as f:
            a[p] = np.load(f)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

hpa*_*ulj 5

将 2 个数组保存到各自的文件中:

In [452]: np.save('x.npy',x)
In [453]: np.save('y.npy',y)
Run Code Online (Sandbox Code Playgroud)

使用文件浏览器工具,创建一个zip文件,并尝试加载它:

In [454]: np.load('xy.zip')
Out[454]: <numpy.lib.npyio.NpzFile at 0xb48968ec>
Run Code Online (Sandbox Code Playgroud)

貌似np.load检测到zip性质(独立于名称),并返回一个NpzFile对象。让我们将它分配给一个变量,然后尝试正常的.npz提取:

In [455]: xy=np.load('xy.zip')

In [456]: xy['x']
Out[456]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [457]: xy['y']
Out[457]: 
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])
Run Code Online (Sandbox Code Playgroud)

因此load可以lazy对任何zip文件文件执行加载npy,无论它是如何创建的。