从python中的txt文件中读取两个相同字符串之间的文本块

2024-09-29 23:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

    self.viewerData = []
    tempViewerData = []
    tempViewer = []
    started = False
    with open("tittardata.txt", "r") as fp:
        for i, line in enumerate(fp.readlines()):
            if line.startswith("=="):
                started = True
                continue
            if started and line.startswith("--"):
                started = False
            if started == True:
                tempViewerData.append(line.rstrip("\n"))

我试图从txt文件中读取两端用“--”分隔的块。 在第一个块上,分隔由以“===”开始,以“-”结尾的不同符号来处理。即将到来的块被同一个符号解析,这使得提取块更加困难。这是我迄今为止的努力,感谢所有的帮助。在

以下是文本文件的摘录:

^{pr2}$

Tags: selftxtfalsetrueifwithline符号
2条回答
blocks = []
block = []

for line in f:
    if line[:3] in ('===', ' -'):
        # don't record empty blocks, avoids empty block at start
        if block:
            blocks.append(block)
            block = []
    else:
        block.append(line.rstrip('\n'))
# needed if last block is not bounded by separator
if block:
    blocks.append(block)

使用一个生成器,使仅由=-组成的行变为空,然后按非空的数据分组,例如:

from itertools import groupby

with open('your_file') as fin:
    lines = (line.strip('-=\n') for line in fin)
    blocks = [list(g) for k, g in groupby(lines, bool) if k]
    # [['19.37/2', '19.52/2', '21.07/1', '21.22/1', '21.37/1'], ['19.37/2', '19.52/2']]

如果您不需要一次全部的数据,那么就让blocks成为一个生成器,然后循环使用。。。。在

^{2}$

相关问题 更多 >

    热门问题