Python: template system

a sample template system which recognize {@xxx} pattern and take appropriate actions

it is similar to the mechanism bitbake deploys to deal with .bb files

tools

regular expression (match and substitute)

dictionary and scope

eval and exec

 

code

#!/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

{@name = 'James.C'}
{@email = 'james.c.2012.c.james@gmail.com'}
{@language = 'python'}

{@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()}


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$

 

转载于:https://my.oschina.net/u/158589/blog/74401

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值