2016-05-10 162 views
4

我有一個程序計算偏移量(差異),然後使用numPy將它們存儲在16位無符號整數中,並且我想將此int存儲到二進制文件中,因爲它是二進制文件形成。即如果offset的值是05,我希望文件顯示「01010000 00000000」,但不是字符串。 我寫的代碼是:Python:將int寫入二進制文件

target = open(file_cp, 'wb') 
target.write('Entries') 
target.write('\n') 
Start = f.tell() 
while(!EOF): 
    f.read(lines) 
    Current = f.tell() 
    offset = np.uint16(Current-Start) 
    target.write(offset) 

有後f.read(系)進行一些處理,但多數民衆贊成那種想法。只要偏移量小於127,代碼就可以正常工作。一旦偏移量超過127,文件中會出現0xC2以及二進制數據。在文件中出現

數據如下(十六進制視圖,小印度): 00 00 05 00 0E 00 17 00 20 00 3C 00 4E 00 7B 00 C2 8D 00 C2 92 00 C2 9F 00

莫非有人建議解決這個問題?

回答

0

您應該使用內置的struct模塊。取而代之的是:

np.uint16(Current-Start) 

試試這個:

struct.pack('H', Current-Start) 
+0

我認爲'struct.pack('H',np_uint16_instance)'與'np_uint16_instance.tostring()' – mgilson

+0

相同。這會寫一個字符串到文件中,而不是我正在尋找的。我已經更新了這個問題,對不起,如果以前不清楚的話。 –

1

試試這個。

import numpy as np 
a=int(4) 
binwrite=open('testint.in','wb') 
np.array([a]).tofile(binwrite) 
binwrite.close() 

b=np.fromfile('testint.in',dtype=np.int16) 
print b[0], type(b[0]) 

輸出:4類型 'numpy.int16'

我希望這是世界衛生大會,你所期待的。 適用於n> 127 但讀取和寫入numpy數組... binwrite = open('testint.in','ab')將讓您追加更多的整數到文件。

+0

這個答案可以通過使用['with statement'](https://docs.python.org/dev/reference/compound_stmts.html#the-with-statement)來改善(這樣文件總是被關閉,代碼變得更加慣用/可讀/更短)並作爲函數打印 - 就目前而言,您的程序在當前Python版本中包含語法錯誤。 – phihag

+0

我在2.7上試過,對不起。 – alxg

+0

謝謝你的建議。它仍然做同樣的事情。而不是4,我試着148和文件讀取(十六進制視圖):c2 94 00 –