2013-10-12 61 views
0

我有以下文件 “template.txt”搜索和替换使用python

function FA() 
{ 
    if(){...} 
    message=[msg] 
    message=[msg] 
} 
function FB() 
{ 
    if(){...} 
    message=[msg] 
    message=[msg] 
} 
function FC() 
{ 
    if(){...} 
    message=[msg] 
    message=[msg] 
} 

我想做到这一点:

./script.py --function FB --message TEST 

,并得到这样的结果:

function FA() 
{ 
    if(){...} 
    message=[msg] 
    message=[msg] 
} 
function FB() 
{ 
    if(){...} 
    message=TEST 
    message=TEST 
} 
function FC() 
{ 
    if(){...} 
    message=[msg] 
    message=[msg] 
} 

我现在可以使用getopt正确检索所有选项和参数,但我无法弄清楚如何优雅地实现上述行为。有任何想法吗?有没有可以帮助我的图书馆?

我能够使用AWK实现这种行为,但现在我需要它在python中。在AWK中,您可以转到特定的行(例如函数FC()),并从那里开始替换,直到您再次触碰另一个函数。我似乎无法弄清楚在Python中。

我也想知道是否有更好的方法来解决这个问题。

+0

你可以用'split'和创建模板'加入'撕开文字并将其与您的信息一起缝合。 –

+0

@WaleedKhan谢谢,但如何解决我的问题? – Kam

+0

@GraemeStuart我已经更新了我的问题以及我试过的问题 – Kam

回答

1

一旦你得到你的变量,并让他们正确地消毒,你可以做这样的事情。

def templater(template,function,message): 
    template = template.split('function') 
    for i,f in enumerate(template): 
     if function in f: 
      template[i] = f.replace('[msg]',message) 
    return 'function'.join(template) 

编辑: 至于一个更好的方法,你应该考虑使用的格式化语言微型或http://docs.python.org/2/library/string.html#formatspec作为Jinja2的一个实际的模板语言,http://jinja.pocoo.org/docs/