我有以下代码,它生成 mat 文件(.npz格式):
import numpy as np
x = np.arange(10)
np.savez('mat',x)
Run Code Online (Sandbox Code Playgroud)
现在我想将另一个数组附加到现有文件中:
y = np.arange(21)
np.savez('mat',y)
Run Code Online (Sandbox Code Playgroud)
但是,它用 y 替换了 x 数组。我想在文件中包含这两个数组。此外,我不想同时将它们写入文件。
我以帖子上的评论作为开始,下面的代码似乎可以满足您的要求。(我只使用 python 3.6 和基本模块,它可能适用于其他 python 版本)
import zipfile
import io
import os
import numpy as np
test_np1 = np.random.random(100)
test_np2 = np.random.random(100)
# initial file
filename = 'npfile.npz'
try:
np.savez_compressed(filename, test_np1=test_np1)
with np.load(filename) as loaded_npz:
print(np.array_equal(test_np1, loaded_npz['test_np1']))
bio = io.BytesIO()
np.save(bio, test_np2)
with zipfile.ZipFile(filename, 'a') as zipf:
# careful, the file below must be .npy
zipf.writestr('test_np2.npy', data=bio.getbuffer().tobytes())
with np.load(filename) as loaded_npz:
print(np.array_equal(test_np1, loaded_npz['test_np1']))
print(np.array_equal(test_np2, loaded_npz['test_np2']))
finally:
os.remove(filename)
Run Code Online (Sandbox Code Playgroud)