Python3-numpy:使用numpy.savetxt将数据追加到文件中

49

我正在尝试使用numpy的savetxt函数将数据附加到文件中。下面是最小工作示例

#!/usr/bin/env python3
import numpy as np
f=open('asd.dat','a')
for iind in range(4):
    a=np.random.rand(10,10)
    np.savetxt(f,a)
f.close()

我得到的错误涉及错误类型。

文件"/usr/lib/python3/dist-packages/numpy/lib/npyio.py",第1073行, 在savetxt函数中, fh.write(asbytes(format % tuple(row) + newline)) TypeError: 必须是str类型,而不是bytes类型

在Python2中没有出现此错误,因此我想知道问题可能是什么。有人可以帮帮我吗?


4
你需要以二进制模式打开文件,而不是文本模式:f=open('asd.dat','ba')。此外,考虑使用 with 语句,以确保文件句柄在发生错误时被正确关闭。 - cel
1
可能是重复问题:https://dev59.com/K23Xa4cB1Zd3GeqPe3aS。 - nwk
@cel,问题已解决,谢谢。 - Meenakshi
1个回答

50

你应该以二进制模式打开文件。

#!/usr/bin/env python3
import numpy as np        
f=open('asd.dat','ab')
for iind in range(4):
    a=np.random.rand(10,10)
    np.savetxt(f,a)
f.close()

参考: python - 如何将numpy数组写入csv文件?- Stack Overflow 如何将numpy数组写入csv文件?


一直在寻找这个“ba”选项,谢谢。 - dorien
我的机器上,np.savetxt 的 'b' 选项无法正常工作。有人能确认一下吗? - Hyunjun Kim
@HyunjunKim 我的Python代码(在Ubuntu 16.04上使用Python-3.5和Numpy-1.13.3)可以很好地运行以上代码。如果您尝试字符串,请使用附加数据类型(np.savetxt(f, ["AAA"], "%s"))。 - user4352571
@user4352571 我原以为'b'选项是用于以人类无法阅读的格式写入数据。但是上面的代码如果没有'b'选项就无法工作。对我的误解表示抱歉。 - Hyunjun Kim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接