我正在尝试将100x100x100整数数组保存到一个文件中,并将其保存为标题的日期和时间。它不需要是人类可读的(时间戳标题除外)因此我打算使用numpy.save(),一次取一个片并将其保存到文件中,但这不是附加到文件的末尾,它每次都会覆盖,因此文件最终只包含最后一个切片。
是否有类似save()或savetxt()的内容会附加到文件而不是覆盖?
注意:如果它更容易,我可以在保存时将日期/时间放入文件名而不是标题中吗?
我目前的尝试看起来像这样:
with open("outfile.txt",'w') as mfile:
mfile.write(strftime("%x %X\n"))
for i in range(len(x)):
np.savetxt("outfile.txt",x[i])
答案 0 :(得分:1)
使用'a'
标志附加到文件。
numpy.savetxt将数组结构作为输入,因此我们需要重新整形。
p,q,r = x.shape
with open("outfile.txt",'ab') as mfile:
header = strftime("%x %X\n")
np.savetxt(mfile, x.reshape(p*q*r), header=header)
答案 1 :(得分:1)
我是Pickles的粉丝:)。
import cPickle
import time
import numpy as np
arr = np.array(xrange(100)).reshape(10,10)
#write pickle file
with open('out.p', 'wb') as f:
t = time.asctime()
cPickle.dump(t, f, cPickle.HIGHEST_PROTOCOL)
cPickle.dump(arr, f, cPickle.HIGHEST_PROTOCOL)
#read pickle file
with open('out.p', 'rb') as f:
t = cPickle.load(f)
arr = cPickle.load(f)
答案 2 :(得分:0)
在@ galath的建议的帮助下(虽然现在使用'a'或'w'标志实际上并不重要......),我已经使用np.save/load找出了以下方法并将日期作为标题:
outfile="out.npy"
with open(outfile,'w') as mfile:
mfile.write(strftime("%x %X\n")) #write date and time as header
for i in range(len(x)):
np.save(mfile,x[i]) #save each slice
readx=np.zeros((len(x),len(y),len(z)) #empty array to be filled from file
with open(outfile,'r') as mf: #reopen file (for reading in)
dt=mf.readline() #read date/time header
for i in range(len(x)):
readx[i,:,:]=np.load(mf) #read in each slice and save it to array
如果有人有更优雅的解决方案可以随意分享,但这种方式可以满足我现在的需求。