写作UINT16 Raw文件

问题描述:

我试着写下面的代码原始文件:再次与写作UINT16 Raw文件

OutputFile = open(OutputFilePath,'w') 
BlockArray= np.array(A).astype(np.uint16) 
BlockArray.tofile(OutputFile) 
OutputFile.close() 

然后我尝试阅读:

OutputFile = open(OutputFilePath,'r+') 
print np.fromfile(OutputFile,dtype=np.uint16) 

的问题是,文件大小正确的,但第一个8192数字是好的,但然后数字会颠倒或完全错误。阵列的形状为(300,1312,98)。我不知道这里发生了什么事。所以任何人都可以向我解释发生这种情况,以及我如何写一个正确的原始文件?

与反转我的意思是该十六进制数应该是例如A5 01 = 421但在原始文件编号01 A5 = 42241被写入。

+0

哪个版本的Python?哪个OS? –

+0

python 2.7在多个窗口10和7可能8 –

.tofile()方法的默认行为是写一个二进制文件,所以你必须打开,你会以二进制方式写入文件:

OutputFile = open(OutputFilePath, 'wb') 

同样用于读取文件:

OutputFile = open(OutputFilePath, 'rb') 

这在Windows中至关重要,因为Python会对文本(即非二进制)文件进行自动转换。

+0

我确实看到问题是行结束不明白他们为什么在那里,但它似乎工作非常感谢你。奇怪的是,这种行为并不适用于np.memmep。你知道为什么吗? –

+0

@ J.Goedhart:它不适用于'np.memmap()',因为它不调用'file.write()'。 –