code: def _load_file(self, log_file, message_name_filter_list):
          
          if isinstance(log_file, str):
              self._file_handle = open(log_file, "rb")
          else:
              self._file_handle = log_file
  
          # parse the whole file
          self._read_file_header()
          self._last_timestamp = self._start_timestamp
          self._read_file_definitions()
  
          if self.has_data_appended and len(self._appended_offsets) > 0:
              if self._debug:
                  print('This file has data appended')
              for offset in self._appended_offsets:
                  self._read_file_data(message_name_filter_list, read_until=offset)
                  self._file_handle.seek(offset)
  
          # read the whole file, or the rest if data appended
          self._read_file_data(message_name_filter_list)
  
          self._file_handle.close()
          del self._file_handle
docs: load and parse an ULog file into memory