পিটার স্মিটে উল্লিখিত হিসাবে ( https://stackoverflow.com/a/11866695/7424596 ) আপনি কনফিগার পার্সার প্রসারিত করতে চাইতে পারেন, উপরন্তু, একটি ইন্টারপোলেটর তালিকাতে এবং তালিকা থেকে স্বয়ংক্রিয়ভাবে রূপান্তর করতে ব্যবহার করা যেতে পারে।
নীচে রেফারেন্সের জন্য আপনি এমন কোড খুঁজে পেতে পারেন যা স্বয়ংক্রিয়ভাবে কনফিগারকে রূপান্তর করে:
[DEFAULT]
keys = [
Overall cost structure, Capacity, RAW MATERIALS,
BY-PRODUCT CREDITS, UTILITIES, PLANT GATE COST,
PROCESS DESCRIPTION, AT 50% CAPACITY, PRODUCTION COSTS,
INVESTMENT, US$ MILLION, PRODUCTION COSTS, US ¢/LB,
VARIABLE COSTS, PRODUCTION COSTS, MAINTENANCE MATERIALS
]
সুতরাং আপনি কীগুলি অনুরোধ করলে আপনি পাবেন:
<class 'list'>: ['Overall cost structure', 'Capacity', 'RAW MATERIALS', 'BY-PRODUCT CREDITS', 'UTILITIES', 'PLANT GATE COST', 'PROCESS DESCRIPTION', 'AT 50% CAPACITY', 'PRODUCTION COSTS', 'INVESTMENT', 'US$ MILLION', 'PRODUCTION COSTS', 'US ¢/LB', 'VARIABLE COSTS', 'PRODUCTION COSTS', 'MAINTENANCE MATERIALS']
কোড:
class AdvancedInterpolator(Interpolation):
def before_get(self, parser, section, option, value, defaults):
is_list = re.search(parser.LIST_MATCHER, value)
if is_list:
return parser.getlist(section, option, raw=True)
return value
class AdvancedConfigParser(ConfigParser):
_DEFAULT_INTERPOLATION = AdvancedInterpolator()
LIST_SPLITTER = '\s*,\s*'
LIST_MATCHER = '^\[([\s\S]*)\]$'
def _to_list(self, str):
is_list = re.search(self.LIST_MATCHER, str)
if is_list:
return re.split(self.LIST_SPLITTER, is_list.group(1))
else:
return re.split(self.LIST_SPLITTER, str)
def getlist(self, section, option, conv=lambda x:x.strip(), *, raw=False, vars=None,
fallback=_UNSET, **kwargs):
return self._get_conv(
section, option,
lambda value: [conv(x) for x in self._to_list(value)],
raw=raw,
vars=vars,
fallback=fallback,
**kwargs
)
def getlistint(self, section, option, *, raw=False, vars=None,
fallback=_UNSET, **kwargs):
return self.getlist(section, option, int, raw=raw, vars=vars,
fallback=fallback, **kwargs)
def getlistfloat(self, section, option, *, raw=False, vars=None,
fallback=_UNSET, **kwargs):
return self.getlist(section, option, float, raw=raw, vars=vars,
fallback=fallback, **kwargs)
def getlistboolean(self, section, option, *, raw=False, vars=None,
fallback=_UNSET, **kwargs):
return self.getlist(section, option, self._convert_to_boolean,
raw=raw, vars=vars, fallback=fallback, **kwargs)
পিএস ইনডেন্টেশন গুরুত্ব মনে রাখবেন। কনফিগার পার্সার ডক স্ট্রিংয়ে যেমন পড়ে:
মানগুলি একাধিক রেখাকে বিস্তৃত করতে পারে, যতক্ষণ না এগুলি মানের প্রথম লাইনের চেয়ে গভীর থাকে। পার্সার মোডের উপর নির্ভর করে, ফাঁকা রেখাগুলি মাল্টলাইন মানগুলির অংশ হিসাবে বিবেচিত হবে বা উপেক্ষা করা হবে।