在另一个之后找到特定的对象

问题描述 投票:1回答:1

我正在创建一个程序,从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]

但我很难找到停止点。我不能使用找到起点时使用的相同方法,因为停止线也出现在非重要信息之后。

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

python-3.x list extract
1个回答
0
投票

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

  • 每当我们遇到标记一段有趣数据开头的标题时,设置为true(“保持行”)
  • 每当遇到标记结束时设置为false(“丢弃行”)。即使我们遇到无用部分的结束,该变量也被设置为丢弃,该部分不会改变其状态。

这是代码(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)

如果没有一个案例匹配,那么该行就是两件事之一:

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

所以它可以被丢弃。

请注意,标题和截面线末尾不会保存。

© www.soinside.com 2019 - 2024. All rights reserved.