code: def read_channel_list_file(*source):
      
      # read file(s)
      config = configparser.ConfigParser(dict_type=OrderedDict)
      source = file_list(source)
      success_ = config.read(*source)
      if len(success_) != len(source):
          raise IOError("Failed to read one or more CLF files")
      # create channel list
      out = ChannelList()
      out.source = source
      append = out.append
      # loop over all groups and channels
      for group in config.sections():
          params = OrderedDict(config.items(group))
          channels = params.pop('channels').strip('\n').split('\n')
          if 'flow' in params or 'fhigh' in params:
              low = params.pop('flow', 0)
              high = params.pop('fhigh', inf)
              if isinstance(high, string_types) and high.lower() == 'nyquist':
                  high = inf
              frange = float(low), float(high)
          else:
              frange = None
          for channel in channels:
              try:
                  match = CHANNEL_DEFINITION.match(channel).groupdict()
              except AttributeError as exc:
                  exc.args = ('Cannot parse %r as channel list entry' % channel,)
                  raise
              # remove Nones from match
              match = dict((k, v) for k, v in match.items() if v is not None)
              match.setdefault('safe', 'safe')
              match.setdefault('fidelity', 'clean')
              # create channel and copy group params
              safe = match.get('safe', 'safe').lower() != 'unsafe'
              channel = Channel(match.pop('name'), frequency_range=frange,
                                safe=safe, sample_rate=match.pop('sample_rate'))
              channel.params = params.copy()
              channel.params.update(match)
              channel.group = group
              # extract those params for which the Channel has an attribute
              for key in ['frametype']:
                  setattr(channel, key, channel.params.pop(key, None))
              append(channel)
      return out
docs: Read a `~gwpy.detector.ChannelList` from a Channel List File