2013-05-16 87 views
0

我的腳本應該編寫HTML文件,更改HTML菜單以顯示當前頁面爲class =「current_page_item」,以便它在渲染時將突出顯示。它必須做兩次替換,首先將前一頁當前頁設置爲非當前頁,然後將新當前頁設置爲當前頁。兩個writeText.replace行看起來沒有任何作用。它不會給我一個錯誤或任何東西。任何建議,將不勝感激。蟒蛇替換()不按預期工作

for each in startList: 
    sectionName = s[each:s.find("\n",each)].split()[1] 
    if sectionName[-3:] <> "-->": 
     end = s.find("end "+sectionName+'-->') 
     sectionText = s[each+len(sectionName)+12:end-1] 
     writeText = templatetop+"\n"+sectionText+"\n"+templatebottom 
     writeText.replace('<li class="current_page_item">','<li>') 
     writeText.replace('<li><a href="'+sectionName+'.html','<li class="current_page_item"><a href="'+sectionName+'.html') 
     f = open(sectionName+".html", 'w+') 
     f.write(writeText) 
     f.close() 

這裏是我的目標字符串(templatetop)的一部分:

<li class="current_page_item"><a href="index.html" accesskey="1" title="">Home</a></li> 
<li><a href="history.html" accesskey="2" title="">History</a></li> 
<li><a href="members.html" accesskey="3" title="">Members</a></li> 
+1

字符串在python中是不可變的。 – wim

+0

注意'!='比'<>'更可讀「 –

回答

6

replacereturns得到的字符串,所以你需要這樣做:

writeText = writeText.replace('<li class="current_page_item">','<li>') 
writeText = writeText.replace('<li><a href="'+sectionName+'.html','<li class="current_page_item"><a href="'+sectionName+'.html') 
+5

爲了給這個響應增加一點清晰度,replace函數返回一個字符串,因爲字符串本身是不可變的。爲了改變一個字符串,你必須返回一個字符串的新實例,並有相應的更新。 – Bryan

+0

不可變的字符串每次都會給我一個! – John

+0

@John作爲未來的小竅門,您可能會發現在Python(或ipython:http://ipython.org/index.html)交互式shell中嘗試不熟悉的函數是有益的。這會阻止你通過簡單的實驗做出可以證明爲假的假設。這一點,並保持文件靠近。祝你好運。 – misha

1

所以首先你將'<li class="current_page_item">'替換爲'<li>',然後用'<li class="current_page_item">'替換'<li>'。這有點有趣,我不得不說。

除了由misha指出的問題,該替換返回的結果,你的兩個替代事實上相互抵消了。

>>> writeText = """<li class="current_page_item"><a href="index.html" accesskey="1" title="">Home</a></li> 
... <li><a href="history.html" accesskey="2" title="">History</a></li> 
... <li><a href="members.html" accesskey="3" title="">Members</a></li>""" 
>>> result = writeText.replace('<li class="current_page_item">','<li>')>>> result = result.replace('<li><a href="index.html','<li class="current_page_item"><a href="index.html') 
>>> result == writeText 
True 

現在,這只是替代品的第一次迭代,但它很好地表明您正在使用錯誤的解決方案。這也意味着你可以簡單地刪除第一個替換,它仍然可以工作。

此外,爲什麼你要在writeText上進行替換,而只針對templatetop?

+0

嗯,這根本不是什麼他在做什麼看起來更接近第二個替換 –

+0

嗯,是的,沒有。實際上只有替代的第一次迭代互相抵消。但是這使得第一個替代沒有意義。 –

3

你不應該期望的工作,因爲你應該閱讀the documentation:通過更換新的舊的子串出現的所有

返回字符串的副本。