Код для замены строки в файле - это дублирование строк

1

Я пытаюсь заменить несколько строк в файле. Вот мой пример файла:

input a1;
//Power_off assertion for all power ports (1 per each power domain)
// 'assert_Check1
//Start of functional specification here
// always @* reg_z4=Check

Вот код python, который я написал, чтобы заменить строки:

import re,sys,fileinput

for line in fileinput.input(sys.argv[1], inplace=True):
    assertPattern=re.match(r'\/\/\s('assert_.+\)$)',line, re.M)
    alwaysPattern=re.match(r'^\/\/\s(always\s@\*.+\;$)',line, re.M)
    print (line.rstrip().replace('//Power_off assertion for all power ports (1 per each power domain)', ''ifdef assert_stdcell\n\n//Power_off assertion for all power ports (1 per each power domain)'),)
    if assertPattern:
        print (line.rstrip().replace(assertPattern.group(),assertPattern.group(1)))
    print (line.rstrip().replace('//Start of functional specification here',''endif\n\n//Start of functional specification here'),)
    if alwaysPattern:
        print (line.rstrip().replace(alwaysPattern.group(),alwaysPattern.group(1)),)

Этот код отлично подходит для замены. Однако код дублирует все строки в файле. Furhtermore alwaysPattern и assertPattern замена не работает. Вот вывод кода:

input a1;
input a1;
'ifdef assert_stdcell

//Power_off assertion for all power ports (1 per each power domain)
//Power_off assertion for all power ports (1 per each power domain)
// 'assert_Check1
// 'assert_Check1
//Start of functional specification here
'endif

//Start of functional specification here
// always @* reg_z4=Check
// always @* reg_z4=Check

Любая идея, почему происходит дублирование? и почему замена шаблона не работает?

  • 0
    Это не может быть минимальным примером?
  • 0
    обновленный пост в меньший пример
Теги:
python-3.x

1 ответ

0

Дублирование происходит, потому что вам приходится печатать заявления за пределами вашего ifs. Поэтому вы всегда будете печатать строку дважды, и, кроме того, вы будете печатать строку снова, если какой-либо из ваших reg ex будет соответствовать (они этого не делают).

  • 0
    зачем печатать каждую строку дважды, хотя оператор print говорит только о замене определенных строк?
  • 0
    это не то, как заменить работает. Replace принимает строку «s», ищет шаблон и заменяет его, если он его находит, в противном случае s возвращается без изменений (и здесь выводится на печать).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню