如何将3D numpy数组附加到文件?

时间:2015-07-20 13:47:19

标签: python numpy file-io

我正在尝试将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])

3 个答案:

答案 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

如果有人有更优雅的解决方案可以随意分享,但这种方式可以满足我现在的需求。