a sample template system which recognize {@xxx} pattern and take appropriate actionspython
it is similar to the mechanism bitbake deploys to deal with .bb filesexpress
toolsapp
regular expression (match and substitute)ide
dictionary and scopethis
eval and execlua
codespa
#!/usr/bin/env python # a template system: recognize {@XXX} pattern and execute it or evaluate it import re import fileinput # Matches fields enclosed in braces pattern = re.compile(r'{@(.+?)}') # Collect variables in this scope = {} # This is used in re.sub, match is a match object def replacement(match): code = match.group(1) try: # if the field can be evaluated, return it return str(eval(code, scope)) except SyntaxError: # otherwise excuete the statement in the same scope exec code in scope return '' def main(): lines = [] for line in fileinput.input(): lines.append(line) text = ''.join(lines) #substitue all the occurrences of the field pattern print pattern.sub(replacement, text) if __name__ == '__main__': main()
input.net
{@name = 'James.C'}
{@email = 'james.c.2012.c.james@gmail.com'}
{@language = 'python'}
code
{@import time}
Dear {@name},
I would like to learn how to program. I hear you use the {@language} language a lot -- is it something I should consider?
And by the way, is {@email} your correct email address?
Qi, {@time.asctime()}
get
output
chenqi@chenqi-OptiPlex-760:~/mypro/python$ ./templates.py def.txt mail.txt Dear James.C, I would like to learn how to program. I hear you use the python language a lot -- is it something I should consider? And by the way, is james.c.2012.c.james@gmail.com your correct email address? Qi, Fri Aug 24 12:37:34 2012 chenqi@chenqi-OptiPlex-760:~/mypro/python$