我有一个文件,每次在不同数量的行开始和结束处都有一些随机单词。我试图只阅读第一点***合成测试用例***开始和第二点***合成测试用例***结束之间的行。我该怎么写呢?我应该使用re。search吗?如果是,我该如何对文件进行搜索?
您可以使用以下逻辑:
inp = """START OF SYNTHETIC TEST CASE
line 1
line 2
line 3
END OF SYNTHETIC TEST CASE"""
content = re.search(r'bSTART OF SYNTHETIC TEST CASEbs*(.*?)s*END OF SYNTHETIC TEST CASEb', inp, flags=re.S)
print(content.group(1))
这个打印:
line 1
line 2
line 3
当文件适合内存时,正则表达式是很好的。在这种情况下,通常的习惯用法(在任何语言中)是创建一个只包含感兴趣的行的新文件。在Python中,假设你的输入文件是"input.txt"您的输出是"output.txt",它看起来像这样:
with open('input.txt') as f_in, open('output.txt', 'w') as f_out:
for line in f_in:
if line[:-1] == '*** START OF SYNTHETIC TEST CASE ***':
break
for line in f_in:
if line[:-1] == '*** END OF SYNTHETIC TEST CASE ***':
break
f_out.write(line)
以上几点需要注意:
with
语句确保这两个文件在逻辑之外将被关闭。这对于f_out
尤其重要,因为它的缓冲区可能需要刷新到磁盘。- 读取的行将在末尾有
n
,因此对哨兵字符串的测试使用line[:-1]
,从行中剪切最后一个字符。你也可以使用line.strip()
,如果你想从两端删除所有空白。