2013-10-12 62 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/