2016-05-10 27 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後に何らかの処理(ライン)が、アイデアのthatsの並べ替えがあります。オフセットは127未満である限り、コードは正常に動作します。オフセットが127を超えると、バイナリデータと共に0xC2がファイルに表示されます。ファイル内の

データ(16進数表示、少しインド)を次のように現れる: 00 00 05 00 0E 00 17 00 20 00 3C 00 4E 00 7B 00 C2 8D 00 C2 92 00 C2 00

9Fでし誰かが問題の解決策を提案していますか?

答えて

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'

私は、これはあなたが探しているWHAであると思います。 Works for n> 127 しかしnumpy配列を読み書きする... binwrite = open( 'testint.in'、 'ab')はファイルにさらにintを追加させます。

+0

この回答は、['with statement'](https://docs.python.org/dev/reference/compound_stmts.html#the-with-statement)を使って改善することができます(ファイルが常に閉じられるように、コードはより慣用的/読みやすく/短くなります)、関数として出力します。現在のPythonバージョンでは、プログラムに構文エラーがあります。 – phihag

+0

私は2.7でこれを試しました、申し訳ありません。 – alxg

+0

ありがとうございます。それでも同じことが起こります。 4の代わりに、私は148とファイルを(16進表示)を読み取ってみました:c2 94 00 –

関連する問題