从二维numpy数组写入ASCII文件
我有一个二维的 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()
接下来,我用追加的方式打开这个文件,然后把二维数组的值写进去:
f_handle = open(ASCIIout, 'a')
numpy.savetxt(f_handle, MyArray, fmt="%.3f")
f_handle.close()
不过,我遇到了一些问题。首先,fmt
这个参数似乎不太管用,我得到的值是这样的:
9.999000000000000000e+03
如果我只用下面这行代码,我得到的结果是 -9999.000 1.345
,但是这样的话,我就没有把行数、列数等信息加到 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 个回答
2
如果你想让“停止值” -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()
如果你想让 所有 的整数值都没有小数点,可以用 .replace('.000', '', -1)
来实现。