numpy savetxt函数中newline参数的问题

时间:2016-07-21 16:30:48

标签: python numpy

拥有这样的结构化数组:

[ (b'H', 0.9425, 0.1412, 7.1414) ... (b'N', 1.0037, 4.0524, 6.8000)]

我想使用.txt file创建一个numpy.savetxt,其中数组的每个元素都写在不同的行中:

H   0.9425   0.1412   7.1414
N   1.0037   4.0524   6.8000

我设置了newline='\n',但它没有正常工作,所有元素都是用单行写的。与 标题 参数相同的问题,指定的标题也会打印在同一行。

现在看起来像这样:

29Shifts: 1.0  3.0  7.0b'C' 1.0029  3.5098  7.9883 b'N' 1.0039  4.0586  6.8008 
29Shifts: 1.0  4.0  0.0b'C' 1.0029  4.5078  0.9873 b'N' 1.0039  5.0586  -0.2000
29Shifts: 1.0  5.0  9.0b'C' 1.0029  5.5078  9.9844 b'N' 1.0039  6.0586  8.7969 

以下是使用的参数:

np.savetxt(outfile, recarray, fmt=[b'%s','%-7.4f','%-7.4f','%-7.4f'], delimiter='  ', newline='\n', header='29\nShifts: 1.0 1.0 3.5\n', comments='')

谢谢

1 个答案:

答案 0 :(得分:1)

我想知道您系统上的\n是否存在问题;也许Python使用一个值,而你的文件查看器期待另一个(有dos,linux和mac标准)。

我对linux机器上的Ipython会话中的数据和格式没有任何问题。

In [88]: d=[ (b'H', 0.9425, 0.1412, 7.1414),(b'N', 1.0037, 4.0524, 6.8000)]
In [89]: data=np.array(d,'|S1,f,f,f')
In [90]: data
Out[90]: 
array([(b'H', 0.9424999952316284, 0.1412000060081482, 7.14139986038208),
       (b'N', 1.0037000179290771, 4.0524001121521, 6.800000190734863)], 
      dtype=[('f0', 'S1'), ('f1', '<f4'), ('f2', '<f4'), ('f3', '<f4')])

In [91]: np.savetxt('test.txt', data,fmt =[b'%s','%-7.4f','%-7.4f','%-7.4f'])

In [92]: cat test.txt
b'H' 0.9425  0.1412  7.1414 
b'N' 1.0037  4.0524  6.8000 

In [93]np.savetxt('test.txt', data,fmt=[b'%s','%-7.4f','%-7.4f','%-7.4f'], 
  delimiter='  ', newline='\n', header='29\nShifts: 1.0 1.0 3.5\n', comments ='')

In [94]: cat test.txt
29
Shifts: 1.0 1.0 3.5

b'H'  0.9425   0.1412   7.1414 
b'N'  1.0037   4.0524   6.8000