我的脚本应该编写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>
答案 0 :(得分:6)
replace
returns生成的字符串,因此您需要这样做:
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')
答案 1 :(得分:3)
您不应期望这样做,因为您应该阅读the documentation:
返回字符串的副本,并将所有出现的substring old替换为new。
答案 2 :(得分:1)
首先,您将'<li class="current_page_item">'
替换为'<li>'
,然后将'<li>'
替换为'<li class="current_page_item">'
。我不得不说,这有点好笑。
除了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
现在这只是替换的第一次迭代,但它很好地表明您使用的是错误的解决方案。这也意味着你可以简单地删除第一个替换,它仍然可以工作。
另外,当你只定位templatetop时,为什么要在writeText上进行替换呢?