Python удаляет строки текстовой строки # 1 до regex

У меня проблема, что я не могу найти решение в python.

Из командной строки я могу это сделать: sed '1, / COMMANDS / d' / var / tmp / newFile

Это удалит все из строки # 1 до регулярного выражения «COMMANDS». просто

Но я не могу сделать то же самое с Python, который я могу найти.
Re.sub и multiline, похоже, не работают.

Итак, у меня есть вопрос, как я могу сделать это с помощью pythonic? Я действительно предпочитаю не запускать sed изнутри python, если только не должен.

Я бы использовал fileinput с inplace inplace=True чтобы фактически изменить исходный файл, установив флаг, когда вы найдете совпадение и удаление строк до тех пор, пока вы не выполните:

 import fileinput import re found = False for line in fileinput.input("your_file",inplace=True): if re.match("pattern",line): found = True if found: print(line,end="") # print line, python2 else: print(end="") # print, python2 

Если в шаблоне нет ничего сложного, if "pattern" in line также может работать if "pattern" in line .

Установите флаг false.

Итерации по каждой строке. Для каждой строки,
1) Когда вы сопоставляете свой шаблон, установите флаг.
2) Если в настоящий момент установлен флаг, напечатайте строку.

Быстро и грязно:

 import re regex = re.compile('(^|\n)(pattern)(\n|$)') with open('file.txt') as f: entire_file = f.read() with open('file.txt', 'w') as f: print(regex.split(entire_file)[0], end='', file=f) 

Хотя, вероятно, не рекомендуется запускать регулярное выражение по всему файлу, если вам не нужно (например, если ваш шаблон охватывает несколько строк).