2011-08-18 47 views
0

我想在某個標記之後複製行數一定次數。如何複製Python腳本中的標記之後的行?

如果我有一個文本文件,如下所示:

##TextLines## 
Hi 
Hello 
##TextLines## 

我如何擦除標記,一次複製的訂單?

最終文本文件看起來像:

Hi 
Hello 
Hi 
Hello 

現在,我有一個正則表達式查找標籤和一個空白的換行符替換它們。我知道大多數逐行讀取是在打開文件後使用for循環完成的。但是,我不想處理特定的行讀取,但行後。有任何想法嗎?

編輯:可能有多個標記和未標記的文本。例如:

Hi 
##CopyLine1## 
Hello 
##CopyLine1## 
Greetings 
##CopyLine2## 
Howdy 
##CopyLine2## 
Hola 

將成爲:

Hi 
Hello 
Hello 
Greetings 
Howdy 
Howdy 
Hola 
+0

你的問題不是很精確。標籤線是否像打開和關閉的剎車片一樣使用?如果在第一個採樣行之前和/或最後一行之後有一些文本,輸出應該如何顯示? – Achim

+0

是的,這些標籤就像打開和關閉的括號。如果之前或之後有文本,它仍應寫入新文件,但只能寫入一次。 –

回答

1

這應該做的工作

import re 
regex = re.compile("^##.*##\n$") 
out = open("result.txt","w") 
matchfound = True 
inmatch =False 
for line in open('myfile.txt'): 
    if regex.match(line): 
     matchfound = True 
    else: 
     matchfound = False 
    if matchfound and not inmatch: 
     inmatch = True 
     content = [] 
    elif matchfound and inmatch: 
     inmatch = False 
     out.write ("".join(content)) 
    elif inmatch: 
     content.append(line) 
     out.write(line) 
    else: 
     out.write(line) 
out.close() 
+0

這非常接近我最終使用的。 –

0
def isTag(line): 
    return line.startswith('##') 

class LineHandler(object): 
    def normalLine(self,line): 
     if isTag(line): 
      self.lineHandler = self.insideTag 
     else: 
      print line 

    def insideTag(self,line): 
     if isTag(line): 
      self.lineHandler = self.normalLine 
     else: 
      print line 
      print line 

    def __init__(self,path): 
     self.lineHandler = self.normalLine 
     for line in file(path): 
      self.lineHandler(line.strip()) 

LineHandler('lines.txt') 
+0

這個程序看起來很漂亮,但是它立即重複標籤內的線條,並且原始海報要求按塊重複 –

相關問題