2016-06-09 54 views
0

我試圖用'替換'命令替換文件內容,但執行後命令截斷整個數據替換replace.Please幫助。特定匹配後用Python替換文件內容

文件:

<b><center><u>S0 Outage Communication</u></center></b> 
<br><br> <b>Date</b>:08/June/2016 <br> <br> <strong>Time</strong>:01:49 <br> 
<p style='color:red'><b><u>Status:</u></b>RED</p> 
<br><b>Issue</b>:Test <br> <b>Jira:</b> 
<a href=https://website.com/browse/ac-123</a> 
<br><b>Slack:</b> 

替換腳本:

f1 = open('/var/www/html/outage/Test.html', 'r') 
f2 = open('/var/www/html/outage/Test.html', 'w') 
for line in f1: 
    f2.write(line.replace("<p style='color:red'><b><u>Status:</u></b>RED</p>","Test")) 
f1.close() 
f2.close() 

OR

for line in f1: 
    line[line.index('<p style='color:red'><b><u>Status:</u></b>RED</p>')]='Test' 
+0

您需要打開第二個文件,然後將每一行寫入您想要更改的行。然後寫入已更改的行,並繼續將輸入文件中剩餘的行寫入輸出文件。最後,您可以刪除舊文件或重命名它,並將新文件重命名爲原始文件名 –

回答

1

,因爲你打開同一個文件你有問題。它的工作原理是這樣的(至少對我來說):

with open('/var/www/html/outage/Test.html', 'r') as f1: 
    text = f1.read() 

text = text.replace("<p style='color:red'><b><u>Status:</u></b>RED</p>","Test") 

with open('/var/www/html/outage/Test.html', 'w') as f2: 
    f2.write(text) 

的想法是打開文件進行讀取,存儲在一個變量的內容,(與with自動)將其關閉。然後進行替換,再次打開文件進行寫入,並將修改後的內容寫回。

編輯: 後您額外的問題:

的test.html

<b><center><u>S0 Outage Communication</u></center></b> 
<br><br> <b>Date</b>:08/June/2016 <br> <br> <strong>Time</strong>:01:49 <br> 
<p style='color:red'><b><u>Status:</u></b>RED</p> 
<li>ABC</li> 
<br><b>Issue</b>:Test <br> <b>Jira:</b> 
<a href=https://website.com/browse/ac-123</a> 
<li>ABC</li> 
<br><b>Slack:</b> 

和Python代碼:

with open('test.html', 'r') as f1: 
    text = f1.readlines() 

i = 0 
while i < len(text): 
     text[i] = text[i].replace("<p style='color:red'><b><u>Status:</u></b>RED</p>","Test") 
     if (text[i] == '<li>ABC</li>\n'): 
      text.insert(i + 1, '<li>CDF</li>\n') 
      i += 1 
     i +=1 

with open('test1.html', 'w') as f2: 
    f2.writelines(text) 

注意,這是非常有限的,只有工作,如果你知道確切的行(整行,這就是爲什麼\n -line break is required),你想在確切匹配後插入。你當然可以根據某些東西建立字符串,但程序必須知道它們。

如果你還需要更多的東西,你應該看看正則表達式(Python的re模塊)或真正的html解析器(我沒有經驗)。

+0

Thanks..it working .. :) –

+0

還有一個問題,如何在Python中匹配內容旁邊輸入任何文本.Like假設匹配的內容是

  • ABC
  • 並在此之後必須把下一行像
  • CDF
  • 。 –

    +0

    我編輯了答案,希望我能理解你的問題。 – StefanS