Как мне скопировать строки после тега в скрипте Python? - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь скопировать строки определенное количество раз после определенного тега.

Если у меня есть текстовый файл, подобный следующему:

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

1 голос
/ 19 августа 2011

Это должно сделать работу

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 голосов
/ 19 августа 2011
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')
...