我有一个这样的文本文件:
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
查找行,但我不知道如何选择文本块来更改顺序。有什么想法?。
答案 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])