从2D numpy数组中写入ASCII文件

时间:2014-07-21 23:08:00

标签: python arrays file numpy ascii

我有一个2D numpy数组。我想用它制作一个ASCII文件。这是我正在使用的代码a3是numpy数组

f = open('ASCIIout.asc', 'w')
numpy.savetxt(ASCIIout, a3)
f.write("ncols " + str(ncols) + "\n")
f.write("nrows " + str(nrows) + "\n")
f.write("xllcorner " + str(xllcorner) + "\n")
f.write("yllcorner " + str(yllcorner) + "\n")
f.write("cellsize " + str(cellsize) + "\n")
f.write("NODATA_value " + str(noDATA) + "\n")
f.close()

现在我用append选项打开它并写入2D数组值:

f_handle = open(ASCIIout, 'a')
numpy.savetxt(f_handle, MyArray, fmt="%.3f")
f_handle.close()

但是,我有几个问题。首先,fmt确实不起作用我得到这样的值:

9.999000000000000000e+03 

如果我只是使用代码行下方的代码,我会得到-9999.000 1.345,但是,我还没有将ncols,nrows等附加到ASCII文件中。

numpy.savetxt(f_handle, MyArray, fmt="%.3f")

我的数据范围从0到6.我真正想要的是:

-9999 1.345 -9999 3.21 0.13 -9999

我在-9999之后没有得到小数,并且在真实数据之后我得到了小数,例如1.345我在R中创建了ASCII文件,我想知道应该有一个简单的方法来做到这一点在Python中。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您打算使用"停止值" -9999显示没有小数点,您可以让savetxt()"%.3f"格式保存所有值,并将您不想要的结果替换为您想要的结果:

from StringIO import StringIO
import numpy as np
f = StringIO()
x = np.array(( -9999, 1.345, -9999, 3.21, 0.13, -9999), dtype=float)
np.savetxt(f, x, fmt='%.3f')
f.seek(0)
fs = f.read().replace('-9999.000', '-9999', -1)
f.close()
f = open('ASCIIout.asc', 'w')
f.write("ncols " + str(ncols) + "\n")
f.write("nrows " + str(nrows) + "\n")
f.write("xllcorner " + str(xllcorner) + "\n")
f.write("yllcorner " + str(yllcorner) + "\n")
f.write("cellsize " + str(cellsize) + "\n")
f.write("NODATA_value " + str(noDATA) + "\n")
f.write(fs)
f.close()

如果你想要 all 表示没有小数的整数值,.replace('.000', '', -1)就可以实现这一点。