我可以通过使用seek向numpy .npy文件添加额外的头信息吗?

4 投票
1 回答
2072 浏览
提问于 2025-04-16 09:32

我想把一个数组存储到文件里,并在文件头部加一些额外的信息。我想用numpy的二进制格式'.npy'。我能不能通过先定位到数组部分的开头,来读取带有额外头部信息的.npy文件里的数组呢?

我想做的事情是这样的。如果我有一个头部信息占用了'n'个字节:

from tempfile import TemporaryFile
outfile = TemporaryFile()
# Write header to first 'n' bytes.
...
# Write the array after the header.
outfile.seek(n)
x = np.arange(10)
np.save(outfile, x)

# Then to read it back in:
outfile.seek(0)
# Read the header.
...
# Read the array.
outfile.seek(n)
y = np.load(outfile)

1 个回答

1

当然,你可以把一些元数据放到文件的头部。不过,这个过程有点复杂,除非这个文件格式本身就有专门用来存放元数据的头部(看起来这里是这样,除非你能把它放到.npy文件的描述字段里),否则你实际上并不是在使用.npy格式,而是在用一种只有你自己能读懂的格式。

你可以考虑把元数据保存在与原文件同名但后缀为.meta的文件里。可以选择:

foobar.npy
foobar.meta

或者

foobar.npy
foobar.npy.meta

这样做可以大大简化文件格式和文件处理的过程。

撰写回答