私は2つのshort int
のセットを表す4バイトのバイナリ値を含むバイナリファイルを持っています。今、私はバッファ全体を解凍したいバイナリファイルバッファを2つの変数に展開する方法は?
from struct import unpack
fval = b'\xba\x1e\x99\x01' #actualy read from some file
qualdip, azi = unpack('hh', fval)
print(type(qualdip), qualdip)
print(type(azi), azi)
>>> <class 'int'> 7866
>>> <class 'int'> 409
:私は、私はこのような二つの短い整数にシングル4バイトのバイナリ値を展開することができます知っています。現時点では私がやっている:
277メガバイトのファイルの分を引き継ぎ、巨大なメモリのオーバーヘッドを生み出すように見えるqualdips = []
azis = []
with open(bfile, 'rb') as buf:
fval = buf.read(4)
while fval:
qualdip, azi = unpack('hh', fval)
azis.append(azi)
qualdips.append(qualdip)
fval = buf.read(4)
。
ファイルバッファ全体を2つの変数に直接展開したいと思います。これをどのように達成するのですか?
私はstruct.unpack_from
が私の友人だと思っていますが、フォーマットをどのように定式化するのかは分かりません。
with open(bfile, 'rb') as buf:
qualdip, azi = unpack_from('hh', buf)
は2つのだけの値を抽出し、(私は私のファイルの要素の数を知っている)
with open(bfile, 'rb') as buf:
qualdip, azi = unpack_from('72457091h72457091h', buf)
は、出力変数のこのとんでもない量を見込んでいます。したがって:
どのようにdo私はファイルバッファ全体を2つの変数に直接展開しますか?
あなたはオーバーヘッドがどこにあるか見るためにあなたのコードをプロファイリングしましたか? I/O操作が最長時間を要している場合は、ファイルから大きなブロックで読み取ることができます。 – theorifice