按行排列的字符串和数组(矩阵):numpy.savetx

2024-09-23 10:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个字符串数组,它们必须按行排列,然后必须写入文本文件

import numpy as np
title1 = np.array(['text1'])  
title2 = np.array(['text2'])
np.savetxt('result.csv',(title1, title2),fmt="%s")

结果应该是以以下开头的文件:

text1
text2

但更像是这样:

text1text2

第二个问题是在这两行文字下面,我需要在下一行放一个矩阵(我的矩阵要大得多)。矩阵的条目应该用分号“;”隔开-行的末尾不应该有一个(!)

a=np.array([[1.2,2.3,3.4],[4.5,5.6,6.7],[7.8,8.8,9.8]])
np.savetxt('test.csv', a, delimiter=';', fmt='%.1f')

结果文件应如下所示:

text1
text2
1.2;2.3;3.4
4.5;5.6;6.7
7.8;8.8;9.8

上面的代码不会将下一行的条目放入输出文件的下一行。 (当用记事本打开它时,它不起作用,在excel中似乎起作用。如何在输出中以我描述的方式组合字符串和数字?


Tags: 文件csv字符串np条目矩阵数组array
2条回答

我想到了另一条线索:

np.savetxt('test.csv',(title1, title2),fmt="%s", newline='\r\n')

import csv
with open('test.csv', 'a') as f:
    np.savetxt(f, I, delimiter=';', fmt='%s,'newline='\r\n')
f.close()

“a”用于追加模式,但不幸的是,我收到一条错误消息

line 1047, in savetxt
    fh.write(asbytes(format % tuple(row) + newline))
TypeError: must be str, not bytes

当我使用'ab'而不是'a'时,我会得到一个在记事本中看起来正确的结果 但现在在excel中,矩阵的前两列有“日期”模式 ……我在这里寻求澄清,以了解发生了什么?

签出this answer。Numpy是根据unix标准编码的,但是记事本不理解并且只需要windows,并且在没有\r的情况下不会呈现\n,但是几乎任何其他非智能软件都会正确地读取它。

编辑:如this other questiondocumentation中所述,numpy.savetxt有一个参数,允许您为windows设置换行编码。所以,如果你真的想和记事本兼容,你需要的是:

np.savetxt('test.csv', a, delimiter=';', newline='\r\n', fmt='%.1f')

相关问题 更多 >