1. ホーム
  2. python

[解決済み] Pythonでバイナリファイルを読み込む

2022-03-02 19:11:40

質問

Pythonでバイナリファイルを読むのが特に難しいです。手を貸していただけませんか? 私はこのファイルを読む必要があります。

int*4 n_particles, n_groups
real*4 group_id(n_particles)
read (*) n_particles, n_groups
read (*) (group_id(j),j=1,n_particles)

詳しく言うと、ファイル形式は

Bytes 1-4 -- The integer 8.
Bytes 5-8 -- The number of particles, N.
Bytes 9-12 -- The number of groups.
Bytes 13-16 -- The integer 8.
Bytes 17-20 -- The integer 4*N.
Next many bytes -- The group ID numbers for all the particles.
Last 4 bytes -- The integer 4*N. 

Pythonでこれを読むにはどうしたらいいのでしょうか?いろいろ試したのですが、うまくいきません。Pythonでf90プログラムを使って、このバイナリファイルを読み込んで、必要なデータを保存することはできないのでしょうか?

どのように解決するのですか?

バイナリファイルの内容をこのように読み取ります。

with open(fileName, mode='rb') as file: # b is important -> binary
    fileContent = file.read()

でバイナリデータを解凍します。 構造体.unpack :

開始バイトです。 struct.unpack("iiiii", fileContent[:20])

本文:先頭のバイトと末尾のバイトは無視する(=24);残りの部分が本文となるので、本文のバイト数を知るには4で整数を割る;得られた商に文字列 'i' で、unpackメソッドに適した形式を作成します。

struct.unpack("i" * ((len(fileContent) -24) // 4), fileContent[20:-4])

エンドバイトです。 struct.unpack("i", fileContent[-4:])