如何使用Python numpy.savetxt写字符串和浮点数到ASCII文件?(How to u

2019-09-04 05:27发布

我有一组包含字符串和浮点数,如列表:

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))

我想这两个列表堆叠在一起,并将其写入列形式的文本文件; 因此,我想用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

我如何写字符串和浮点数到一个文本文件,使用CSV(我想打,如果读其他人)可能避免? 是否有这样做,而不是使用numpy.savetxt的另一种方式?

Answer 1:

你必须指定格式( fmt你的数据) savetxt ,在这种情况下,作为一个字符串( %s ):

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

默认格式是一个浮动,那就是它期待一个浮动,而不是字符串的原因,并解释了错误信息。



Answer 2:

目前公认的答案并没有真正解决这个问题,它要求如何保存包含字符串和浮点数列表。 对于完整性我提供了一个有效的例子,它是基于经过一些修改,在@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")

更新:这个例子也使用正常工作在Python 3 'U6' Unicode字符串D型 ,创造了当ab 结构的阵列 ,而不是'S6'字节串。 后者将D型在Python 2.7的工作,但会写像串b'NAME_1'在Python 3。



文章来源: How to use python numpy.savetxt to write strings and float number to an ASCII file?