如何将numpy数组写入csv文件?

时间:2014-07-09 17:09:09

标签: python arrays csv numpy python-3.4

我想打开一个新的文本文件,然后将numpy数组保存到该文件中。我写了这段代码:

foo = np.array([1,2,3])
abc = open('file'+'_2', 'w')
np.savetxt(abc, foo, delimiter=",")

我收到此错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-33-fea41927952b> in <module>()
      2 model = cool
      3 abc = open('file'+'_2', 'w')
----> 4 np.savetxt(abc, foo, delimiter=",")

/usr/local/lib/python3.4/site-packages/numpy/lib/npyio.py in savetxt(fname, X, fmt,     delimiter, newline, header, footer, comments)
   1071         else:
   1072             for row in X:
-> 1073                 fh.write(asbytes(format % tuple(row) + newline))
   1074         if len(footer) > 0:
   1075             footer = footer.replace('\n', '\n' + comments)

TypeError: must be str, not bytes

有谁知道什么是错的?

此外,我发现在终端中创建了一个名为file_2的空文件,但其中没有任何内容。

编辑:我正在使用Python3.4

1 个答案:

答案 0 :(得分:8)

看来你正在使用Python3。因此,以二进制模式(wb)打开文件,而不是文本模式(w):

import numpy as np
foo = np.array([1,2,3])
with open('file'+'_2', 'wb') as abc:
    np.savetxt(abc, foo, delimiter=",")

此外,关闭文件句柄abc以确保所有内容都写入磁盘。您可以使用with-statement(如上所示)来完成此操作。

正如DSM所指出的那样,通常在您使用np.savetxt时,您不希望在文件中写入任何其他内容,因为这样做可能会影响以后使用np.loadtxt。因此,不是使用文件句柄,而是简单地将文件名作为第一个参数传递给np.savetxt可能更容易:

import numpy as np
foo = np.array([1,2,3])
np.savetxt('file_2', foo, delimiter=",")