【问题标题】:Find keyword and iterate through file to find the next keyword查找关键字并遍历文件以查找下一个关键字
【发布时间】:2019-08-26 09:22:18
【问题描述】:

我正在文件中搜索特定关键字。从那里我想在前面的行中搜索一个额外的关键字。 例如:搜索“来源”的文本。然后在前 15 行文本中搜索关键字“destination”。 问题是,第二个关键字出现在距离第一个关键字大约 15-20 行的范围内,所以我不能只放 lines[i-15] 因为它不会为每个查找关键字的实例返回相同的结果“来源”。

我尝试设置一个变量,如果在上面的行中找不到第二个关键字,该变量将递增,以便它会继续迭代和搜索,但会出现错误。

第一次尝试...

   keyword_2 ="destination
   j = 
   if re.match(keyword_1, line):
                lineafter = lines[i + j]
                lineafter_split= lineafter.split(' ')

            if value2 and cell_value in line:
                if 'access-list' not in line:
                    if 'nat' not in line:
                        lineafter_2 = lines[i + 1]
                        if 'description' not in lineafter_2:
                            print(lineafter_2)




Second attempt ...
```keyword_1 ="source"
   keyword_2 ="destination
   j=1
   for i, line in enumerate(lines):
       if keyword_1 in line:
          prev_line=lines[i - j]
           for i in range(1,15):
               if w in prev_line:
                   print(prev_line)
               else:j= j+1

【问题讨论】:

    标签: python-3.x loops iteration


    【解决方案1】:

    好的,所以我的理解是你想遍历文本,然后寻找之前的第二个关键字。

    但是,由于我不清楚您是要防止搜索走得太远,还是要查找第二个关键字直到没有前面的行,所以我会给您一个可以同时执行这两种操作的函数。

    def looking_for_keywords(lines, keyword_1, keyword_2, range = None):
        for i,line in enumerate(lines):
            if keyword_1 in line:
                j=0
                max = range if range else i
                not_found = True
                while j<max and not_found:
                    j+=1 
                    not_found = not(keyword_2 in lines[i-j])
                if not_found:
                    print('Not Found')
                else:
                    print(f'Found first at {i} and second at {i-j}')
    

    请注意,您的答案不会给出相同的结果,如果i &lt;3 会表现得很奇怪

    【讨论】:

    • 谢谢。是的,想法是让脚本找到keyword_2 并停止。但是,在我的文件中,keyword_2 从 keyword_1 开始每隔 15-20 行出现一次,因此到目前为止该范围运行良好。如果文件发生更改,最好在看到关键字_2 后停止它。我会测试你的。
    【解决方案2】:

    看起来我找到了答案,以防其他人遇到同样的问题。

        for i, line in enumerate(lines):
            if keyword_1 in line:
                prev_line=lines[i - 1]
                for k in range(1,3):
                    j=k
                    prev_line=lines[i - j]
                    print(prev_line)
     #Then search for keyword_2
    

    【讨论】:

    • 它允许我遍历前面的行,然后搜索关键字。 range 函数允许我指定我想回到多远,我将它添加到 prev_lines 变量,然后搜索第二个词。它会迭代回来,然后找到第二个关键字。
    • 如果ì&lt;3 表示您将打印最后几行。
    猜你喜欢
    • 2020-10-28
    • 2020-08-21
    • 2017-05-08
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多