查找特定 object 后又一个

Finding specific object after another one

我正在创建一个从 500k 行的文本文件中提取相关信息的程序。

到目前为止我所做的是从文本文件中获取信息并将其放入一个列表中,每个元素都是一行。

相关文字格式如下:

*A title that informs that the following section will have the data I'm trying to extract *

*Valuable info in random amount of lines*

*-------------------*

在每个相关信息部分之间,格式相同但以另一个标题开头,即:

*A title that shows that this is data I don't want *

*Non-valuable info in random amount of lines *

*------------------- *

我已经成功地使用以下代码列出了起点的索引:

start = [i for i, x in enumerate(lines) if x[0:4] == searchObject1 and x[5:8] == searchObject2]

但我正在努力寻找停止点。我不能使用查找起点时使用的相同方法,因为停止线也出现在 non-important 信息之后。

我是 Python 和编程的新手,所以解决方案可能很明显。

一个简单的解决方案是逐行循环输入文件,只保留有价值的行。要知道一条线是否有价值,我们使用一个布尔变量,即:

  • 每当我们遇到标记有趣数据部分开始的标题时,设置为 true ("keep the lines"),
  • 每当我们遇到节标记的结尾时设置为 false ("discard the lines")。 变量设置为丢弃,即使我们遇到无用部分的末尾,也不会改变其状态。

这是代码(lines 是包含要解析的数据的字符串列表):

bool keep = false;
data = []

for line in lines:
    if line == <title of useful section> # Adapt
        keep = true
    elif line == <end of section> # Adapt
        keep = false
    else:
        if keep:
            data.append(line)

如果 none 个案例匹配,则该行是以下两种情况之一:

  • 无用节中的一行数据
  • 无用部分的标题

所以可以舍弃

请注意,不会保存标题和部分行的结尾。