如何在python脚本中复制标记后面的行?

时间:2011-08-18 19:53:52

标签: python scripting

我试图在某个标签后复制一定次数的行。

如果我有如下文本文件:

##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

2 个答案:

答案 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()

答案 1 :(得分: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')