使用文件处理程序

时间:2017-11-13 21:28:24

标签: python arrays numpy

在Windows 7上,使用最新的numpy 1.13.3和PYTHON 3.5,如果我有一个名为points的数组,其形状为m x 6,dtype为float32。我可以将数组保存到“foo.txt”文件中,如下所示:

np.savetxt('foo.txt', points, fmt='%f %f %f %d %d %d')

但如果我跑

with open('foo.txt', 'w') as f:
    np.savetxt(f, points, fmt='%f %f %f %d %d %d')

我收到了以下错误:

  

TypeError Traceback(最近一次调用最后一次)   〜\应用程序数据\本地\连续\ Anaconda3 \ LIB \站点包\ numpy的\ LIB \ npyio.py   在savetxt(fname,X,fmt,分隔符,换行符,页眉,页脚,   评论)1214试试:    - > 1215 fh.write(asbytes(格式%tuple(row)+换行符))1216除TypeError:

     

TypeError:write()参数必须是str,而不是bytes

     

在处理上述异常期间,发生了另一个异常:

     

在()1中的TypeError Traceback(最近的最后一次调用)   打开('foo.txt','w')作为f:   ----> 2 np.savetxt(f,points,fmt ='%f%f%f%d%d%d')3

     

〜\应用程序数据\本地\连续\ Anaconda3 \ lib中\站点包\ numpy的\ lib中\ npyio.py   在savetxt(fname,X,fmt,分隔符,换行符,页眉,页脚,   注释)1217引发TypeError(“数组dtype('%s')之间不匹配)   和“1218”格式说明符('%s')“    - > 1219%(str(X.dtype),格式))1220 if len(footer)> 0:1221页脚= footer.replace('\ n','\ n'+评论)

     

TypeError:数组dtype('float32')与格式不匹配   说明符('%f%f%f%d%d%d')

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

此行为仅在Python 3中发生,并且取决于numpy的版本。

对于numpy的较早版本(1.14.0之前的版本),必须以wb模式打开文件才能使用savetxt写入字节。

在numpy 1.14.0或更高版本中,此问题已解决。问题中的示例按预期工作。