Эффективная замена текста в файле между двумя строками, соответствующими шаблону - PullRequest
0 голосов
/ 15 мая 2019

Я хочу отредактировать очень длинный файл в python после первого появления заголовка.Файл выглядит примерно так:

*First Heading
line1
line2
line3
line4
*Second Heading
line1
line2
line3
line4
*Third Heading 
line1
line2
line3
...
...
more headings and many more lines

Я хочу заменить (например) строку 2 второго заголовка на что-то вроде этого:

someNewtext line2

Я могу сделать это оченьэффективно с помощью sed, используя что-то вроде этого:

sed -e -i '/\*Second\ Heading/,/\*Third\ Heading/s/line2/someNewText\ line2/' file.txt 

Могу ли я сделать что-то подобное в Python эффективным способом?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Если мы перенесем команду sed на python, она будет выглядеть примерно так:

import re
import fileinput

state = 0
for line in fileinput.input('file.txt', inplace=True, backup='.bak'):
    line = line.rstrip('\r\n')
    if state == 1:
        line = re.sub('line2', 'someNewText line2', line)
    if line.startswith('*Second Heading'):
        state = 1
    elif line.startswith('*Third Heading'):
        state = 0
    print line
fileinput.close()

Это будет эффективно во время выполнения, но может быть не так эффективно при программировании, как sed или Perl.Вздох.

0 голосов
/ 15 мая 2019

Используя модуль подпроцесса , вы можете просто использовать sed, как и раньше.

subprocess.run("sed -e -i '/\*Second\ Heading/,/\*Third\ Heading/s/line2/someNewText\ line2/' file.txt")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...