我必须编写一个用于解析日志文本文件的python脚本,但是唯一感兴趣的数据是正在检查的“测试”的数据。文本文件具有以下常规格式:
Test 1
[lines of data]
Test 2
[lines of data]
...
[数据行]表示来自所述测试的多行或几行数据,并且日志文件可以具有任意数量的测试。因此,如果我只想看“测试1”,我想让我的脚本执行的是提取“测试1”和“测试2”之间的所有信息,但在“测试2”之前停止读取。
要注意的是,即使我要解析测试12中的数据,并希望在测试13之前停止它,我也希望我的脚本做同样的事情,因为其中可以有任意数量的测试文件。我将如何处理?
答案 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之间寻找匹配项,依此类推。它使用“?<=”后面的正向搜索和“?=“后面的正向搜索来查找匹配项,而使用“。*”,您将能够获得匹配项之间的所有内容。