2014-03-13 26 views
0

在我的任務中,我必須在兩個指定單詞(以這些單詞開頭的行)之間寫入一段文本到txt文件中。輸入文件看起來像這樣:將文本塊寫入文件

SP_LINE 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
// 
NON_SP_LINE 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
END_NON_LINE 
SP_LINE 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
texttexttexttext 
// 

我必須寫入文件SP_LINE之間的文本「//」 我試過這個:

import re 

fr=open("various.multi").read() 
gr=open("locus.txt",'w') 

for m in re.finditer("SP_LINE",fr): 
    a=int(m.start()) 
    for n in re.finditer("//", fr[a:]): 
     b=int(n.end()) 
     gr.write(fr[a:b]) 
gr.close() 

但事實並非如此工作

回答

0

試試這個:

import re 

fr=open("various.multi").read() 
gr=open("locus.txt",'w') 

for m in re.finditer(r"\bSP_LINE\b",fr): 
    for n in re.finditer(r"//", fr[m.end():]): 
     gr.write(fr[m.start():m.end()+n.end()]) 
     break 
gr.close() 
1

那麼,你可以在這裏很聰明。你實質上說的是你需要從文件中刪除字符串'SP_LINE'和'//'。因此,簡化您的代碼如下所示:

import re 

gr=open("locus.txt",'w') 

for line in open('data.txt'): 
    if re.match('SP_LINE|//', line): 
     continue 
    gr.write(line) 
gr.close() 
0

工作的呢?

進口重新

fr=open("various.multi").read() 
gr=open("locus.txt",'w') 

for m in re.finditer("SP_LINE",fr): 
    a = int(m.start()) 
    b = a + int(re.search("//", fr[a:]).start()) 
    gr.write(fr[a:b]) 
gr.close()