如何使用python numpy.savetxt将string和浮点数写入ASCII文件?

我有一组包含string和浮点数的列表,例如:

import numpy as num NAMES = num.array(['NAME_1', 'NAME_2', 'NAME_3']) FLOATS = num.array([ 0.5 , 0.2 , 0.3 ]) DAT = num.column_stack((NAMES, FLOATS)) 

我想将这两个列表叠在一起,并以列的forms写入文本文件; 因此,我想使用numpy.savetxt (如果可能的话)来做到这一点。

 num.savetxt('test.txt', DAT, delimiter=" ") 

当我这样做,我得到以下错误:

 >>> num.savetxt('test.txt', DAT, delimiter=" ") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Python/2.7/site-packages/numpy-1.8.0.dev_9597b1f_20120920-py2.7-macosx-10.8-x86_64.egg/numpy/lib/npyio.py", line 1047, in savetxt fh.write(asbytes(format % tuple(row) + newline)) TypeError: float argument required, not numpy.string_ 

理想的输出文件如下所示:

 NAME_1 0.5 NAME_2 0.2 NAME_3 0.3 

我怎么能写string和浮点数字到一个文本文件,可能避免使用csv(我想让如果可读的其他人)? 有没有另一种方法做这个,而不是使用numpy.savetxt

你必须在savetxt指定你的数据格式( fmt ),在这种情况下是一个string( %s ):

 num.savetxt('test.txt', DAT, delimiter=" ", fmt="%s") 

默认的格式是一个浮点数,这就是它期望float而不是string的原因,并解释错误信息。

目前接受的答案实际上没有解决这个问题,该问题询问如何保存包含string和浮点数字的列表。 为了完整起见,我提供了一个完整的工作示例,它基于@joris评论中给出的链接进行了一些修改。

 import numpy as np names = np.array(['NAME_1', 'NAME_2', 'NAME_3']) floats = np.array([ 0.1234 , 0.5678 , 0.9123 ]) ab = np.zeros(names.size, dtype=[('var1', 'U6'), ('var2', float)]) ab['var1'] = names ab['var2'] = floats np.savetxt('test.txt', ab, fmt="%10s %10.3f") 

更新:在创buildab 结构化数组时,使用'U6'stringdtype ,而不是'S6'字节string,此示例在Python 3中也能正常工作。 后者的dtype可以在Python 2.7中工作,但会在Python 3中编写像b'NAME_1'这样的string。