pwtools.common.template_replace¶
- pwtools.common.template_replace(txt, dct, conv=False, warn_mult_found=True, warn_not_found=True, disp=True, mode='dct')[source]¶
Replace placeholders dct.keys() with string values dct.values() in a text string. This function adds some bells and whistles such as warnings in case of not-found placeholders and whatnot.
- Parameters:
txt (string with placeholders)
dct (dictionary with placeholders (keys) and values to replace them)
conv (bool, convert values dct.values() to strings with frepr())
warn_mult_found (bool, warning if a key is found multiple times in txt)
warn_not_found (bool, warning if a key is NOT found in txt)
disp (tell which keys have been replaced)
mode (str, {'dct', 'txt'}, placeholder mode) –
- ‘dct’Dictionary mode. Placeholders are of special Python dictionary
string replacement form: ‘%(<name>)<format_str>’, e.g. ‘%(foo)s’ and dct.keys() must be normal strings, e.g. ‘foo’. dct.values() can be anything. The conversion to a string is done at replacement time and determined by the <format_str>. This effectively does txt % dct. This method is faster, uses Python standard syntax and is therefore default.
- ’txt’Text mode. Placeholders in txt and keys in dct are the
exact same arbitrary string (e.g. ‘XXXFOO’ in both). Here, dct.values() must be strings. If not, use conv=True to automatically convert them to strings, but note that this is limited since only frepr(<val>) is used.
- Return type:
new string
Examples
>>> txt = 'XXXONE XXXPI' >>> dct = {'XXXONE': 1, 'XXXPI': math.pi} >>> template_replace(txt, dct, conv=True, mode='txt') '1 3.1415926535897931e+00' >>> >>> dct = {'XXXONE': '1', 'XXXPI': '%.16e' %math.pi} >>> template_replace(txt, dct, mode='txt') '1 3.1415926535897931e+00' >>> >>> txt = '%(one)s %(pi).16e'; dct = {'one': 1, 'pi': math.pi} >>> template_replace(txt, dct) '1 3.1415926535897931e+00' >>> >>> txt % dct '1 3.1415926535897931e+00'