'Read the config file, if it exists. Using defaults otherwise.'

def read(self):

    for config_file in self.config_file_paths():
        if os.path.exists(config_file):
            try:
                with open(config_file, encoding='utf-8') as f:
                    self.parser.read_file(f)
                    self.parser.read(f)
                logger.info("Read    configuration    file    '{}'".format(config_file))
            except UnicodeDecodeError as err:
                logger.error("Cannot    decode    configuration    file    '{}':    {}".format(config_file, err))
                sys.exit(1)
            self._loaded_config_file = config_file
            break
    if (not self.parser.has_section('quicklook')):
        self.parser.add_section('quicklook')
    self.set_default_cwc('quicklook', 'cpu')
    self.set_default_cwc('quicklook', 'mem')
    self.set_default_cwc('quicklook', 'swap')
    if (not self.parser.has_section('cpu')):
        self.parser.add_section('cpu')
    self.set_default_cwc('cpu', 'user')
    self.set_default_cwc('cpu', 'system')
    self.set_default_cwc('cpu', 'steal')
    iowait_bottleneck = ((1.0 / multiprocessing.cpu_count()) * 100.0)
    self.set_default_cwc('cpu', 'iowait', [str((iowait_bottleneck - (iowait_bottleneck * 0.2))), str((iowait_bottleneck - (iowait_bottleneck * 0.1))), str(iowait_bottleneck)])
    ctx_switches_bottleneck = (56000 / multiprocessing.cpu_count())
    self.set_default_cwc('cpu', 'ctx_switches', [str((ctx_switches_bottleneck - (ctx_switches_bottleneck * 0.2))), str((ctx_switches_bottleneck - (ctx_switches_bottleneck * 0.1))), str(ctx_switches_bottleneck)])
    if (not self.parser.has_section('percpu')):
        self.parser.add_section('percpu')
    self.set_default_cwc('percpu', 'user')
    self.set_default_cwc('percpu', 'system')
    if (not self.parser.has_section('load')):
        self.parser.add_section('load')
    self.set_default_cwc('load', cwc=['0.7', '1.0', '5.0'])
    if (not self.parser.has_section('mem')):
        self.parser.add_section('mem')
    self.set_default_cwc('mem')
    if (not self.parser.has_section('memswap')):
        self.parser.add_section('memswap')
    self.set_default_cwc('memswap')
    if (not self.parser.has_section('network')):
        self.parser.add_section('network')
    self.set_default_cwc('network', 'rx')
    self.set_default_cwc('network', 'tx')
    if (not self.parser.has_section('fs')):
        self.parser.add_section('fs')
    self.set_default_cwc('fs')
    if (not self.parser.has_section('sensors')):
        self.parser.add_section('sensors')
    self.set_default_cwc('sensors', 'temperature_core', cwc=['60', '70', '80'])
    self.set_default_cwc('sensors', 'temperature_hdd', cwc=['45', '52', '60'])
    self.set_default_cwc('sensors', 'battery', cwc=['80', '90', '95'])
    if (not self.parser.has_section('processlist')):
        self.parser.add_section('processlist')
    self.set_default_cwc('processlist', 'cpu')
    self.set_default_cwc('processlist', 'mem')
