code: def table_from_gwf(filename, name, columns=None, selection=None):
      
      # open frame file
      if isinstance(filename, FILE_LIKE):
          filename = filename.name
      stream = io_gwf.open_gwf(filename)
  
      # parse selections and map to column indices
      if selection is None:
          selection = []
      selection = parse_column_filters(selection)
  
      # read events row by row
      data = []
      i = 0
      while True:
          try:
              frevent = stream.ReadFrEvent(i, name)
          except IndexError:
              break
          i += 1
          # read first event to get column names
          if columns is None:
              columns = _columns_from_frevent(frevent)
          # read row with filter
          row = _row_from_frevent(frevent, columns, selection)
          if row is not None:  # if passed selection
              data.append(row)
  
      return Table(rows=data, names=columns)
docs: Read a Table from FrEvent structures in a GWF file (or files)
  
      Parameters
      ----------
      filename : `str`
          path of GWF file to read
  
      name : `str`
          name associated with the `FrEvent` structures
  
      columns : `list` of `str`
          list of column names to read
  
      selection : `str`, `list` of `str`
          one or more column selection strings to apply, e.g. ``'snr>6'``