У меня большой файл (16 Мб), который был написан с использованием ccode. Я хотел бы прочитать данные в Python (и использовать Numpy)
Вот (упрощенный) код для чтения данных:
typedef struct
{
int32 c;
int32 g;
double l;
double h;
double n;
short S;
int32 w[100];
short A;
short P;
short D;
short W;
char E[256];
char T[512];
}H;
myfile = open("my_binary_file.dat", "rb")
fseek(myfile, 0, SEEK_SET);
fread(&H.c, sizeof(int32), 1, myfile);
fread(&H.g, sizeof(int32), 1, myfile);
fread(&H.l, sizeof(double), 1, myfile);
fread(&H.h, sizeof(double), 1, myfile);
fread(&H.n, sizeof(double), 1, myfile);
fread(&H.S, sizeof(short), 1, myfile);
fread(H.w, sizeof(int32), 100, myfile);
fread(&H.A, sizeof(short), 1, myfile);
fread(&H.P, sizeof(short), 1, myfile);
fread(&H.D, sizeof(short), 1, myfile);
fread(&H.W, sizeof(short), 1, myfile);
fread(H.E, sizeof(char), 256, myfile);
fread(H.T, sizeof(char), 512, myfile);
Я попробовал несколько вещи, но не могу заставить его работать с numpy "fromfile". Вот то, что я думаю, будет работать, и это «работает», но я не могу понять смысл строки символов.
import numpy as np
from dataclasses import dataclass
@dataclass
class H:
c: int
g: int
l: float
h: float
n: float
S: int
w: list
A: int
P: int
D: int
W: int
E: list
T: list
myfile = open("my_binary_file.dat", "rb")
H.c = np.fromfile(myfile, dtype=np.dtype(np.int32), count=1, offset=0)
H.g = np.fromfile(myfile, dtype=np.dtype(np.int32), count=1, offset=1)
H.l = np.fromfile(myfile, dtype=np.dtype(np.double), count=1, offset=2)
H.h = np.fromfile(myfile, dtype=np.dtype(np.double), count=1, offset=3)
H.n = np.fromfile(myfile, dtype=np.dtype(np.double), count=1, offset=4)
H.S = np.fromfile(myfile, dtype=np.dtype(np.int), count=1, offset=5)
H.w = np.fromfile(myfile, dtype=np.dtype(np.int32), count=100, offset=6)
H.A = np.fromfile(myfile, dtype=np.dtype(np.int), count=1, offset=106)
H.P = np.fromfile(myfile, dtype=np.dtype(np.int), count=1, offset=107)
H.D = np.fromfile(myfile, dtype=np.dtype(np.int), count=1, offset=108)
H.W = np.fromfile(myfile, dtype=np.dtype(np.int), count=1, offset=109)
H.E = np.fromfile(myfile, dtype=np.dtype(np.byte), count=256, offset=110)
H.T = np.fromfile(myfile, dtype=np.dtype(np.byte), count=512, offset=366)
Кто-нибудь знает, как использовать Numpy fromfile для преобразования двоичных данных в правильный формат?