2016-07-06 90 views
1

什麼我的文字是在蟒蛇在一個文件中替換字符串

$ TITLE = XXXX YYYY
1 $字幕= XXXX YYYY ANSA
2 $ LABEL =第一個標籤
3 $移動分析
$ 4幅相輸出
$ 5子情況ID = 30411

我想要什麼

$ TITLE = XXXX YYYY
1 $ SUBTITLE = XXXX YYYY安莎
2 $ LABEL = 新標籤
3 $變位
4 $震級相輸出
$ 5子情形ID = 30411

的代碼我使用

import re 
fo=open("test5.txt", "r+") 
num_lines = sum(1 for line in open('test5.txt')) 
count=1 
while (count <= num_lines): 
    line1=fo.readline() 
    j= line1[17 : 72] 
    j1=re.findall('\d+', j) 
    k=map(int,j1)  
    if (k==[30411]): 
     count1=count-4 
     line2=fo.readlines()[count1] 
     r1=line2[10:72] 
     r11=str(r1) 
     r2="new label" 
     r22=str(r2) 
     newdata = line2.replace(r11,r22) 
     f1 = open("output7.txt",'a') 
     lines=f1.writelines(newdata) 
    else: 
     f1 = open("output7.txt",'a') 
     lines=f1.writelines(line1) 
    count=count+1 

問題在於寫行。一旦搜索到30411,就必須返回3行,並將標籤更改爲新標籤。除標籤行之外,新的輸出文本應具有與以前相同的所有行。但它沒有正確書寫。誰能幫忙?

+0

這行符號字面上是說'2 $ LABEL'還是'$ LABEL'代表文件中的任何內容? –

+1

它很可能從字面上做。這是某種有限元輸出控制文件。但OP正在試圖從倫敦通過南非到紐約。 –

+0

問題是,在搜索subase之後,它必須寫回一個新的標籤。我輸出的結果是寫在同一位置,即最後一行。我似乎不能想到一種不同的方法。 –

回答

1

除了許多令人毛骨悚然的,但非關鍵的問題,你是在一個迭代的中間使用readline()調用readlines(),導致你不能從文件的開始,但是從fo手柄的當前位置,即讀線在包含30411的行後面。 需要使用單獨的句柄再次打開輸入文件,或者(最好)將最後4行保存在內存中,而不是重新讀取需要更改的那一行。