import re
exp_rx = re.compile('%\((\w+)\)')
def format_obj(obj, text):
"""
>>> o = Duck(one='one', two='two', three=5)
>>> format_obj(o, '%(one)s %(two)s %(three)d')
'one two 5'
"""
return text % dict((a, getattr(obj, a))
for a in re.findall(exp_rx, text))
# ---- Support for the doctest from here down:
class Duck(object):
"""Quack!"""
def __init__(self, **kw):
self.__dict__.update(kw)
if __name__ == '__main__':
import doctest
doctest.testmod()