使用负荷在zipfi内存档

2024-05-29 10:23:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含许多npy文件的zipfile(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)

有什么想法吗?在


Tags: 文件importnumpyaswithnpzipfile1
2条回答

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

In [452]: np.save('x.npy',x)
In [453]: np.save('y.npy',y)

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

^{pr2}$

看起来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]])

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

numpy函数需要一个file对象,而不是结果文本。对于zip文件,我通常会执行以下操作:

with ZipFile(path, mode='r') as archive:
    with io.BufferedReader(archive.open(filename, mode='r')) as file:

我想你应该通过拉链。打开(p,mode='r')进入np.负荷(f) 一。同时,我强烈建议你不要这样做拉链。读(p) 因为它会同时读取内存中的整个文件。因此,使用您的代码约定,请尝试:

^{pr2}$

相关问题 更多 >

    热门问题