Python numpy savetxt函数中的换行参数问题

Python numpy savetxt函数中的换行参数问题,python,numpy,Python,Numpy,具有这样的结构化数组: [(b'H',0.9425,0.1412,7.1414)…(b'N',1.0037,4.0524,6.8000)] 我想使用numpy.savetxt创建一个.txt文件,其中数组的每个元素都写在单独的行中: H 0.9425 0.1412 7.1414 N 1.0037 4.0524 6.8000 我设置了换行符='\n',但它不能正常工作,所有元素都是在一行中编写的。标题参数也存在同样的问题,指定的标题也打印在同一行中 现在看起来是这样的:

具有这样的结构化数组:

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

我想使用
numpy.savetxt
创建一个
.txt文件
,其中数组的每个元素都写在单独的行中:

H   0.9425   0.1412   7.1414
N   1.0037   4.0524   6.8000
我设置了
换行符='\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='')

谢谢

我想知道您的系统上的
\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 
[88]中的
d=[(b'H',0.9425,0.1412,7.1414),(b'N',1.0037,4.0524,6.8000)]
在[89]中:data=np.array(d'| S1,f,f')
In[90]:数据
出[90]:
阵列([(b'H',0.942499952316284,0.1412000060081482,7.14139986038208),
(b'N',1.0037000179290771、4.0524001121521、6.80000190734863)],

数据类型=[('f0','S1'),('f1',你能只打印2-3行原始数据吗?请不要使用数组。实际上,我设置了
newline='\r\n'
,现在它可以工作了。我用简单的windows记事本打开文件。但是我不明白为什么
newline='\n'
不能工作。顺便说一句,使用
newline='\n'
我可以在UEDIT32中打开文件,然后就没有问题了。windows在一行末尾使用两个字符,一个“return”和一个“newline”。Unix只使用一个字符。在Windows上运行的Python应该意识到这一点并使用双字符。但是在Linux计算机上编写的文件如果传输到Windows,可能需要转换。但是更好的编辑器可以处理这两种样式(或MAC).好的,现在我明白了。另外还有一个小问题。如何去掉字母前的b符号?因为我想有这样的行H 0.9425 0.1412 7.1414。我是否必须将第一列替换为通过使用
.decode('UTF-8')编辑旧列而获得的新列
method?谢谢
b
在Python3中标记一个字节字符串,默认为unicode。它对应于
'S'
dtype。
loadtxt
savetxt
以字节模式打开它们的文件。你是在文件中还是在Python会话中看到
b
?我在文件和Python会话中都看到了它们