Python:텍스트 파일에서 줄을 뒤로 이동

Python:텍스트 파일에서 줄을 뒤로 이동

임의의 텍스트와 두 개의 고유 태그가 포함된 텍스트 파일을 상상해 보세요.

01 text text text
02 text text text
03 __DELETE_THIS_FIRST__
04 text text text
05 text text text
06 text text text
07 text text text
08 __DELETE_THIS_LINE_SECOND__
09 a few
10 interesting
11 lines follow
12 __DELETE_THIS_LINE_THIRD__
13 text text text
14 text text text
15 text text text
16 text text text
17 __DELETE_THIS_LINE_FIRST__
18 text text text
19 text text text
20 text text text
21 text text text
22 __DELETE_THIS_LINE_SECOND__
23 even
24 more
25 interesting lines
26 __DELETE_THIS_LINE_THIRD__

END 태그와 thr THIRD 태그 사이의 흥미로운 줄을 이동하는 Python 표현식을 원합니다.더 일찍BEGIN은 세 가지 표시를 모두 표시하고 제거합니다. 결과는 다음과 같습니다.

01 text text text
02 text text text
09 a few
10 interesting
11 lines follow
04 text text text
05 text text text
06 text text text
07 text text text
13 text text text
14 text text text
15 text text text
16 text text text
23 even
24 more
25 interesting lines
18 text text text
19 text text text
20 text text text
21 text text text

이 세 개의 태그는 항상 세 개의 태그이며 파일에 여러 번 나타납니다. FIRST 태그는 항상 SECOND 태그 앞에 나타나고, SECOND 태그는 항상 THIRD 태그 앞에 나타납니다.

어떤 아이디어가 있나요?

관련된:126325

답변1

다음은 작업을 수행하는 Python 스크립트입니다.

#! /usr/bin/env python

buffer = []
markerBuffer = []

beginFound = False
endFound = False

begin_marker = "__DELETE_THIS_LINE_FIRST__"
end_marker = "__DELETE_THIS_LINE_SECOND__"

line_count_marker = "__DELETE_THIS_LINE_THIRD__"

with open('hello.txt') as inFile:
    with open('hello_cleaned.txt', 'w') as outFile:
        for line in inFile:
            if begin_marker in line and delete_marker in line:
                beginFound = True
                continue
            if end_marker in line and delete_marker in line:
                assert beginFound is True
                endFound = True
                continue
            if beginFound and not endFound:
                markerBuffer.append(line)
                continue
            if beginFound and endFound and line_count_marker not in line:
                buffer.append(line)
                continue
            if beginFound and endFound and line_count_marker in line:
                for mLine in markerBuffer:
                    buffer.append(mLine)

                markerBuffer = []
                beginFound = False
                endFound = False
                continue
            if not beginFound and not endFound:
                buffer.append(line)
                continue
        for line in buffer:
            outFile.write(str(line))

관련 정보