解析文本文件,仅捕获具有特定字符的两行之间的行

时间:2019-01-18 14:40:43

标签: python fileparsing

我必须编写一个用于解析日志文本文件的python脚本,但是唯一感兴趣的数据是正在检查的“测试”的数据。文本文件具有以下常规格式:

Test 1
[lines of data]

Test 2
[lines of data]

...

[数据行]表示来自所述测试的多行或几行数据,并且日志文件可以具有任意数量的测试。因此,如果我只想看“测试1”,我想让我的脚本执行的是提取“测试1”和“测试2”之间的所有信息,但在“测试2”之前停止读取。

要注意的是,即使我要解析测试12中的数据,并希望在测试13之前停止它,我也希望我的脚本做同样的事情,因为其中可以有任意数量的测试文件。我将如何处理?

1 个答案:

答案 0 :(得分:0)

我可以建议使用以下代码:

import re

with open("1new.txt","r") as file:
    eaw=file.read()

num_of_tests=2
for i in range(1,num_of_tests):
    extract=re.search(r"(?<=Test %s)(.*)(?=Test %s)"%(i,i+1),eaw,re.DOTALL).group()
    print(extract)

输出将是:

[lines of data]
[lines of data]

可以添加其他行,以将提取的行附加到其他文件中:

with open("extracted.txt","a") as file2:

    file2.write(extract)

regex只会在测试1和测试2之间寻找匹配项,依此类推。它使用“?<=”后面的正向搜索和“?=“后面的正向搜索来查找匹配项,而使用“。*”,您将能够获得匹配项之间的所有内容。