使用python从文件中剥离文本块

Stripping a block of text from a file using python

我必须基本上从文件1中删除一块文本。文件1有很多行(大约3GB大小)。块如下所示,

1
2
3
4
5
6
7
8
9
10
11
12
line 1
line 2
<pattern1> {
...
...
...
}
<pattern2> {
...
...
...
}

我基本上是想写出文件中大括号""之间的行块,并且在阅读行时尝试为每个条目(pattern1,pattern2)进行模式匹配。我通过另一个文件(文件2)给出了模式列表。所以我在考虑下面的逻辑(不是代码,而是想法),但是我没有信心。有人能澄清什么是解决这个问题的最佳方法吗?

  • 打开文件2并获取要匹配的字符串模式。
  • 打开文件1并开始搜索文件2中字符串模式的每一行。
  • 找到后,启用该标志并开始将大括号之间的行写入输出文件(比如file3)。
  • 一旦遇到右大括号,请取消设置标志并停止对文件(文件3)的写入。


您的建议易于理解和实施。这也使得调试、维护和更新变得容易。是的,这是一种很好的使用方法。

1
2
3
4
5
6
7
8
9
10
11
12
start_pattern_list =   # Make this a list of all the patterns from file2
stop_pattern ="}
"

out_flag == False
for line in <input file>:
    if '<' in line:
        if any(p in line for p in start_pattern_list):
            out_flag = True     # Turn on output
    if out_flag:
        out_file.write(line)
    if stop_pattern in line:
        out_flag = False    # Turn off output

这适用于简单文件:没有嵌套的大括号,输入触发器(模式)仅作为模式出现(不嵌入大括号中)。