2017-04-04 74 views
0

我試着寫下面的代碼原始文件:再次與寫作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 –

回答

2

.tofile()方法的默認行爲是寫一個二進制文件,所以你必須打開,你會以二進制方式寫入文件:

OutputFile = open(OutputFilePath, 'wb') 

同樣用於讀取文件:

OutputFile = open(OutputFilePath, 'rb') 

這在Windows中至關重要,因爲Python會對文本(即非二進制)文件進行自動轉換。

+0

我確實看到問題是行結束不明白他們爲什麼在那裏,但它似乎工作非常感謝你。奇怪的是,這種行爲並不適用於np.memmep。你知道爲什麼嗎? –

+0

@ J.Goedhart:它不適用於'np.memmap()',因爲它不調用'file.write()'。 –