code: def parse_config(main_section, *filenames):
      
      filename = filenames[-1]
      filename = os.path.abspath(filename)
      here = os.path.dirname(filename)
      defaults = dict(here=here, hash='#')
      defaults['#'] = '#'
  
      config = configparser.ConfigParser(
          defaults, allow_no_value=False,
          interpolation=configparser.ExtendedInterpolation(),
      )
      config.optionxform = str
      config.read([os.path.expanduser('~/.irc3/passwd.ini')] + list(filenames))
  
      value = {}
      for s in config.sections():
          items = {}
          for k, v in config.items(s):
              if '\n' in v:
                  v = as_list(v)
              elif v.isdigit():
                  v = int(v)
              elif v.replace('.', '').isdigit() and v.count('.') == 1:
                  v = float(v)
              elif v in ('true', 'false'):
                  v = v == 'true' and True or False
              items[k] = v
          if s == main_section:
              value.update(items)
          else:
              for k in ('here', 'config'):
                  items.pop(k, '')
              value[s] = items
      value.update(defaults)
      value['configfiles'] = filenames
      return value
docs: parse config files