Viewing file: clconfpars.py (1.68 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/env python # -*- coding: utf-8 -*-
import ConfigParser import os
SECHEAD = 'asection'
class FakeSecHead(object): def __init__(self, fp): self.fp = fp self.sechead = '['+SECHEAD+']\n'
def readline(self): if self.sechead: try: return self.sechead finally: self.sechead = None else: return self.fp.readline()
def load(path, case_sensitive=False): config = ConfigParser.ConfigParser() if case_sensitive: config.optionxform = str config.readfp(fp=FakeSecHead(open(path)), filename=path) return dict(config.items(section=SECHEAD))
cache = {}
def load_once(path, ignore_errors = False): """ Read ini file once (cached) and return its content as dict """ try: res = cache[path] except KeyError: try: res = cache[path] = load(path) except (IOError, ConfigParser.Error): if not ignore_errors: raise res = cache[path] = {} return res
def change_settings(dict, path, tmp_path=None): if not tmp_path: tmp_path = path+".tmp" fin = open(path, 'r') fout = open(tmp_path, 'w') used_keys = [] for line in fin: l = line.strip() if l and not l.startswith('#'): key, value = l.split('=', 1) key = key.strip() if key in dict: fout.write(key+'='+str(dict[key])+'\n') used_keys.append(key) continue fout.write(line) fin.close() for key in dict.keys(): if key not in used_keys: fout.write(key+'='+str(dict[key])+'\n') fout.close() os.rename(tmp_path, path)
|