Search code examples
pythonnumpyfreadfromfile

How to skip bytes after reading data using numpy fromfile


I'm trying to read noncontiguous fields from a binary file in Python using numpy fromfile function. It's based on this Matlab code using fread:

    fseek(file, 0, 'bof');
    q = fread(file, inf, 'float32', 8);

8 indicates the number of bytes I want to skip after reading each value. I was wondering if there was a similar option in fromfile, or if there is another way of reading specific values from a binary file in Python. Thanks for your help.

Henrik


Solution

  • Something like this should work, untested:

    import struct
    
    floats = []
    with open(filename, 'rb') as f:
        while True:
            buff = f.read(4)                # 'f' is 4-bytes wide
            if len(buff) < 4: break
            x = struct.unpack('f', buff)[0] # Convert buffer to float (get from returned tuple)
            floats.append(x)                # Add float to list (for example)
            f.seek(8, 1)                    # The second arg 1 specifies relative offset
    

    Using struct.unpack()