如何打开一个 .npz 文件

55

有人给我发送了一个.npz文件。我如何使用Python打开该文件,并从中读取数据?


这是一个重复的问题,与https://dev59.com/qG855IYBdhLWcg3wVikt 相同。 - Schien
5个回答

52

在 Python3 中使用以下代码:

from numpy import load

data = load('out.npz')
lst = data.files
for item in lst:
    print(item)
    print(data[item])

2
这只会打印出文件的内容,而你可以通过在任何IDE/文本编辑器中打开文件来获取它。 - nkirit

30

您希望使用 numpy.load() 与上下文管理器一起使用

with numpy.load('foo.npz') as data:
    a = data['a']

根据文档所述,您应在此处使用上下文管理器:

NpzFile类的返回实例必须关闭以避免泄漏文件描述符。

而上下文管理器将为您处理这个问题。


12
import numpy as np

data = np.load('imdb.npz', allow_pickle=True)
lst = data.files

for item in lst:
    print(item)
    print(data[item])

17
这个网站通常不赞成只有代码而没有注释或解释的回答。你能否编辑你的回答并添加一些注释或解释来说明你的代码是如何工作的,它是如何解决提问者的问题的?解释应该回答类似以下的问题:它做了什么?它是如何实现的?它去了哪里?请参见:如何回答问题。谢谢! - Eduardo Baitello

9

使用load函数:

import numpy as np
data = np.load('your_file.npz')

2

正如np.savez文档中所示:

使用load打开保存的.npz文件时,会返回一个NpzFile对象。这是一个类似于字典的对象,可以通过查询其数组列表(使用.files属性)和数组本身来获取。

您可以轻松地将其视为字典:

data = np.load('mat.npz')        # data contains x = [1,2,3,4,5]

for key in data.keys():
    print(key)                        # x
    print(data[key])                  # [1,2,3,4,5]

它是一个类似字典的对象,因为你不能直接给NpzFile对象中的"data"赋值,否则会出现错误:"TypeError: NpzFile' object does not support item assignment"。

但你可以将其转换成字典,完全像使用字典一样使用它,并将其保存到.npz文件中,就像这样:

data = dict(data)
data["y"] = np.arange(21)
np.savez("mat",**data) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接