Я пытаюсь заменить несколько строк в файле. Вот мой пример файла:
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
Любая идея, почему происходит дублирование? и почему замена шаблона не работает?
Дублирование происходит, потому что вам приходится печатать заявления за пределами вашего ifs. Поэтому вы всегда будете печатать строку дважды, и, кроме того, вы будете печатать строку снова, если какой-либо из ваших reg ex будет соответствовать (они этого не делают).