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