|
|
- import struct
-
-
- def read_chunk(fh, chunk_location):
- """
- Reads a piece of data given the location of its pointer.
-
- :param fh: an open file handle to the ND2
- :param chunk_location: a pointer
- :type chunk_location: int
-
- :rtype: bytes
-
- """
- fh.seek(chunk_location)
- # The chunk metadata is always 16 bytes long
- chunk_metadata = fh.read(16)
- header, relative_offset, data_length = struct.unpack("IIQ", chunk_metadata)
- if header != 0xabeceda:
- raise ValueError("The ND2 file seems to be corrupted.")
- # We start at the location of the chunk metadata, skip over the metadata, and then proceed to the
- # start of the actual data field, which is at some arbitrary place after the metadata.
- fh.seek(chunk_location + 16 + relative_offset)
- return fh.read(data_length)
|