在两点之间分割线



我有一个文件,每次在不同数量的行开始和结束处都有一些随机单词。我试图只阅读第一点***合成测试用例***开始和第二点***合成测试用例***结束之间的行。我该怎么写呢?我应该使用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)

以上几点需要注意:

  1. with语句确保这两个文件在逻辑之外将被关闭。这对于f_out尤其重要,因为它的缓冲区可能需要刷新到磁盘。
  2. 读取的行将在末尾有n,因此对哨兵字符串的测试使用line[:-1],从行中剪切最后一个字符。你也可以使用line.strip(),如果你想从两端删除所有空白。

最新更新