如何重新排序文本文件的文本块?

时间:2018-03-17 23:40:50

标签: python python-3.x text text-files

我有一个这样的文本文件:

Label: A

Text1

Text2

Label: B

Text3

Text4

Label: C

Text5

Text6

我想按逆序重新排序文本块,保持块内的原始顺序。像这样:

Label: C

Text5

Text6

Label: B

Text3

Text4

Label: A

Text1

Text2

Label行总是包含相同的文字,我在这里添加字母以便更好地解释。此外,Label始终位于相同位置并使用整行。

唯一的限制是:Python 3.6并且没有外部模块。我可以在内存中加载完整的文件,因此如果你不想要的话,不需要逐行读取文件。

我知道如何使用Label查找行,但我不知道如何选择文本块来更改顺序。有什么想法?。

1 个答案:

答案 0 :(得分:1)

对于这种类型的工作,基本模式是定义一个知道如何产生有意义单位的函数(你关心的文件的块或部分):

import sys

def main(file_path):
    blocks = list(read_blocks(file_path))
    for block in reversed(blocks):
        for line in block:
            print(line, end = '')

def read_blocks(file_path):
    block = []
    with open(file_path) as fh:
        for line in fh:
            if line.startswith('Label: '):
                if block:
                    yield block
                block = []
            block.append(line)
    # A common bug is to forget the last block.
    if block:
        yield block

main(sys.argv[1])