在python中查找关键字后面的行集

时间:2014-12-11 16:01:47

标签: python string text

我有一个包含以下内容的文本文件:

   X_string
      > data1 : data
      > data2 : data
      > data3 : data
      > data4 : data4_data1
                data4_data2
                data4_data3

   X_string2
      > data1 : data
      > data2 : data
      > data3 : data
      > data4 : data4_1_data1
                data4_1_data2
                data4_1_data3

等等。 data4_data的数量......动态变化。但在它结束后,有一个空行分隔下一个相似的序列。我想知道是否有一种方法可以在与 X_string

匹配后立即检索找到的data4

这就像

if string == X_string:
     get_data4()

应该返回

      > data4 : data4_data1
                data4_data2
                data4_data3

 if string == X_string2:
      get data4() 

应该返回

      > data4 : data4_1_data1
                data4_1_data2
                data4_1_data3

没有 re.findall 因为我需要每次调用一个data4。但是findall一次获得所有匹配的模式,因为我在循环中有以下内容

1 个答案:

答案 0 :(得分:0)

以下函数将打开一个文件,扫描它直到找到搜索词,然后获取以data4行开头的所有行,直到找到一个空行。

def get_data4(filename, search_term):
    out = []  # will accumulate data4 lines

    with open(filename) as f:
        # find search term
        for line in f:
            if line.strip() == search_term:
                break

        # skip first three data items
        next(f)
        next(f)
        next(f)

        # find data4 (all lines until blank line)
        for line in f:
            if not line.strip():
                break

            out.append(line)

    return ''.join(out)  # concatenate data4 back into a string

像这样使用:

data4 = get_data4('my_data.txt', 'X_string2')
print(data4)