2013-05-18 91 views
1

我有一個整數列表,看起來像:文本替換不工作

I = [1020 1022 ....]

我需要打開被存儲爲.TXT一個XML文件,其中每個條目包括

Settings="Keys1029"/> 

我需要迭代通過記錄替換列表條目中的每個數字「Keys1029」。 ,使而不是:

....Settings="Keys1029"/> 
....Settings="Keys1029"/> 

我們:

....Settings="Keys1020"/> 
....Settings="Keys1022"/> 

到目前爲止,我有:

import os 
out = [1020,1022] 
with open('c:\xml1.txt') as f1,open('c:\somefile.txt',"w") as f2: 
    #somefile.txt is temporary file 
    text = f1.read() 
    for item in out: 
     text = text.replace("Keys1029","Keys"+str(item),1) 
    f2.write(text) 
#rename that temporary file to real file 
os.rename('c:\somefile.txt','c:\xml1.txt') 

這是替換:

....Settings="Keys1029"/> 
....Settings="Keys1029"/> 

....Settings="Keys1"/> 
....Settings="Keys1"/> 

任何想法我做錯了什麼?

謝謝你在前進,

+0

這聽起來*幾乎*喜歡你忘了'str(item)',而是使用'text.replace('1029',1)'。您在這裏發佈的代碼實際上可行。 –

+0

那麼你沒有迭代輸入文件。 – elyase

+0

對不起,替換行實際上是:text = text.replace(「Keys1029」,「Keys」+ str(item),1)。我已經解決了上述問題。 – user61629

回答

1

我建議一個不同的,更強大的算法:

text = """ 
bla bla bla 1029 and 1029 
bla bla bla 1029 
bla bla bla 1029 and 1029 
""" 
out = [1020,1022] 
cnt_repl=0 
while True: 
    text_new = text.replace("1029", str(out[cnt_repl%(len(out))]),1) 
    if text_new==text: break 
    cnt_repl+=1 
    text=text_new 
print text 

它返回示例文本:

bla bla bla 1020 and 1022 
bla bla bla 1020 
bla bla bla 1022 and 1020 
+0

感謝您的代碼示例 – user61629