2
    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 文件中读取两端用“---”分隔的块。在第一个块上,分隔由不同的符号处理,以“===”开头,以“--”结尾。即将到来的块由相同的符号解析,使得提取块更加困难。这是我到目前为止的尝试,感谢所有帮助。

这是文本文件的摘录:

=================
19.37/2
19.52/2
21.07/1
21.22/1
21.37/1
-------
19.37/2
19.52/2
-------
4

2 回答 2

0

使用一个生成器,它可以有效地使行只包含=-空白,然后按非空白数据分组,例如:

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一个生成器并循环它....

blocks = (list(g) for k, g in groupby(lines, bool) if k)
for block in blocks:
    # do something
于 2013-12-30T16:38:19.217 回答
0
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)
于 2013-12-30T16:23:11.323 回答