我有以下代码,它生成mat文件(.npz
格式(:
import numpy as np
x = np.arange(10)
np.savez('mat',x)
现在我想将另一个数组附加到现有文件中:
y = np.arange(21)
np.savez('mat',y)
但是,它用 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)
步骤1:创建您的第一个文件
d = np.arange(10)
np.savez("mat",x = d) # do not forget to name your variable d
Step2:读取你的文件,将其转换为字典对象,将你的新变量添加到字典中,最后用这个字典覆盖你的mat.npz
data = np.load("mat.npz")
data = dict(data)
data["y"] = np.arange(21)
np.savez("mat",**data)
第 3 步:验证最后一个变量是否已添加到mat.npz
文件中。
data = np.load("mat.npz")
print(data[x]) # [0 1 2 3 4 5 6 7 8 9]
print(data[y]) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
这里不是一个真正的解决方案,但我想分享一种将数组添加到新 nyz 文件的方法。
import numpy as np
array_dict = {'new_array': new_array}
for k in old_npz_file:
array_dict[k] = old_npz_file[k]
np.savez(file_path, **array_dict)
我想你可以说这是"添加"数组的一种方法。