import re as RE class ArgParser(object): global_parser = None def __init__(self): self._table = dict() return def clear(self): self._table.clear() return def load_args(self, arg_strs): succ = True vals = [] curr_key = '' for str in arg_strs: if not (self._is_comment(str)): is_key = self._is_key(str) if (is_key): if (curr_key != ''): if (curr_key not in self._table): self._table[curr_key] = vals vals = [] curr_key = str[2::] else: vals.append(str) if (curr_key != ''): if (curr_key not in self._table): self._table[curr_key] = vals vals = [] return succ def load_file(self, filename): succ = False with open(filename, 'r') as file: lines = RE.split(r'[\n\r]+', file.read()) file.close() arg_strs = [] for line in lines: if (len(line) > 0 and not self._is_comment(line)): arg_strs += line.split() succ = self.load_args(arg_strs) return succ def has_key(self, key): return key in self._table def parse_string(self, key, default=''): str = default if self.has_key(key): str = self._table[key][0] return str def parse_strings(self, key, default=[]): arr = default if self.has_key(key): arr = self._table[key] return arr def parse_int(self, key, default=0): val = default if self.has_key(key): val = int(self._table[key][0]) return val def parse_ints(self, key, default=[]): arr = default if self.has_key(key): arr = [int(str) for str in self._table[key]] return arr def parse_float(self, key, default=0.0): val = default if self.has_key(key): val = float(self._table[key][0]) return val def parse_floats(self, key, default=[]): arr = default if self.has_key(key): arr = [float(str) for str in self._table[key]] return arr def parse_bool(self, key, default=False): val = default if self.has_key(key): val = self._parse_bool(self._table[key][0]) return val def parse_bools(self, key, default=[]): arr = default if self.has_key(key): arr = [self._parse_bool(str) for str in self._table[key]] return arr def _is_comment(self, str): is_comment = False if (len(str) > 0): is_comment = str[0] == '#' return is_comment def _is_key(self, str): is_key = False if (len(str) >= 3): is_key = str[0] == '-' and str[1] == '-' return is_key def _parse_bool(self, str): val = False if (str == 'true' or str == 'True' or str == '1' or str == 'T' or str == 't'): val = True return val