类似于Meenakshi我正在尝试使用numpy的savetxt函数将数据追加到文件中。
我有一个.data文件,我想向其附加更多float32数据。
responses = np.array(responses,np.float32)
responses = responses.reshape((responses.size,1))
# save as new training results
np.savetxt(sampleData,samples)
np.savetxt(responseData,responses)
# want the option to append to previously written results
我可以将以下内容附加为二进制文件,但需要在float32中附加。
# append to old training results
with open(sampleData, 'ab+') as fs:
fs.write(samples)
with open(responseData, 'ab+') as fr:
fr.write(responses)
当我尝试
# append to old training results
with open(sampleData, 'a+') as fs:
fs.write(samples)
with open(responseData, 'a+') as fr:
fr.write(responses)
我得到“ TypeError:write()参数必须是str,而不是numpy.ndarray”
鉴于以上所述,在python中与该.data文件类型进行交互时应使用的语法/扩展名是什么?
您的评论提示正在发生的事情:
以下内容会追加,但是会输入乱码(我假设是因为二进制,但是如果没有b,它将告诉我我需要输入一个字符串)->使用open(sampleData,'ab +')作为fs:fs.write (样本),其open(responseData,'ab +')为fr:fr.write(responses)
[当您尝试不使用b
进行写时,它会抱怨,因为您需要在正常写模式下给它一个字符串-您不能只写一个列表/数组(即[C0 ]和samples
是)。当您使用responses
时,您是以二进制/字节模式编写的,因此,传递给b
的所有内容都会被强制转换为字节。如果以二进制模式编写以下内容,这就是我看到的内容:
write
与在我创建的数组上调用resp = np.array([1, 2, 4, 5], np.float32)
resp = resp.reshape((resp.size, 1))
np.savetxt(file1, resp)
with open(file2, 'ab+') as fo:
fo.write(resp)
# From Hex view of written file
00 00 80 3F 00 00 00 40 00 00 80 40 00 00 A0 40
相同:
bytes(...)
因此,您只需要将数据格式化为import binascii
binascii.hexlify(bytes(resp))
# produces:
b'0000803f00000040000080400000a040' -> '00 00 80 3f 00 00 00 40 00 00 80 40 00 00 a0 40'
友好的表示形式,例如加入字符串(例如):
str
...但是,格式化的方式当然取决于您的要求。