2017-07-29 12 views
0

私は8000個のパーティクルの位置を含むバイナリファイルを持っています。 各パーティクルの値は "-24.6151 ..."(私のプログラムでどのような精度が与えられているのかわかりません)倍精度(?)でしょうか?構造を知らずにPythonでバイナリファイルを読む

いつ私は、値のリスト全体をスキップするが、あなたが見ることができるように、これらの値が遠く、私が期待したものとされている

Lenght of buffer is 64000 

10 

168 

179 

43 
... 

:私は出力として得る

In: with open('.//results0epsilon/energybinary/energy_00004.dat', 'br') as f: 
    buffer = f.read() 
    print ("Lenght of buffer is %d" % len(buffer)) 

    for i in buffer: 
     print(int(i)) 

:私はこのコードを使用してファイルを読み取ろう私はある種のデコードエラーがあると思います。

私はあなたが今印刷しているどのような援助のあらゆる種類:)

+1

私はバイナリファイルを解凍するために 'struct'ライブラリを試すことができます - https://docs.python.org/3/library/struct.html – pkisztelinski

+0

あなたが使用してcnをバイナリデータを解凍(またはパック)するための['struct'](https://docs.python.org/3/library/struct.html)モジュール –

答えて

4

をいただければ幸いですあなたの浮動小数点データを構成bytesあります。したがって、数値としては意味がありません。

もちろん、そこに私たちはあなたのデータを見ていないので、何も100%確かな答えはませんが、私は推測してみましょう:

あなたは8000の読み込むための値とファイルサイズを持っているので、あなたはおそらく64000ですdouble IEEE値(それぞれ8バイト)を持っています。それがではなく、 IEEEなら、あなたはトーストです。その場合

あなたは次のことを試みることができる:

import struct 
with open('.//results0epsilon/energybinary/energy_00004.dat', 'br') as f: 
    buffer = f.read() 
    print ("Length of buffer is %d" % len(buffer)) 

    data = struct.unpack("=8000d",buffer) 

データが偽の印刷された場合、それはおそらく、エンディアンの問題です。したがって=8000<8000または>8000に変更してください。参照および梱包/フォーマットを開梱ため

https://docs.python.org/3/library/struct.html

+0

with print(data)期待どおり次の出力(-24.615130168305804、-24.61513016830572 ...)が得られました。今私はそれをさらに処理することができます。どうもありがとうございました :) –

関連する問題