Search code examples
pythonmatlabreadfile

Read Binary files on Python


I would like to write the equivalence of this matlab code to python when reading binary file

fid=fopen('File', 'rb')
fread(fid, 17, 'int8', 'l');
[twf, points] = fread(fid, 'int16', 'l');
twf = fread(fid, 'int16', 'l');
fclose(fid)

Thanks


Solution

  • Your code is incorrect in two places:

    1. fread returns the number of characters (bytes) read, not the number of data points read. Since you read 'int16', points is twice the number of data points in your case.
    2. The last fread is not necessary, since [twf, points] = fread(fid, 'int16', 'l'); already reads the whole remaining file. Actually you are overwriting your read data with nothing.

    Anyway, here is the Python/numpy code:

    from numpy import fromfile
    
    with open('File', 'rb') as fid:
        fromfile(fid, '<i1', 17) # do we need to specify LE here?
        twf = fromfile(fid, '<i2')
        points = twf.size