我是Python的新手,我坚持使用正则表达式替换。我正在解析一个设置文件,其中包含以下语句:
set fmri(convolve7) 3
设置文件用作模板。脚本解析模板并使用更新的设置写入新的设置文件。
我的程序的主要结构是
for line in infile:
if condition = true
for each in listofelements
if re.search(each, line):
print(re.sub(r"\d+", "0", line), file=outfile, end='') # double output
if re.search(somethingelse, line):
print(re.sub(templatesubid, i, line), file=outfile, end='')# normal substitution
等。
for循环中的替换导致双输出,而在for循环之外它不会。 for循环似乎插入带有正确替换字符串的换行符,即
set fmri(convolve7) 0
set fmri(convolve7) 3
其他变量按预期工作,而代码相同。可能是for循环导致这个双输出吗?
答案 0 :(得分:1)
看起来相关的代码位于底部:
for line in infile:
if len(subparamlist) > 0:
for j in subparamlist:
query = j.replace(")", "\)").replace("(", "\(")
if re.search(query, line):
print(re.sub(r"\d+", "0", line), file=outfile, end='') #trouble!
if re.search(templatesubid, line) and re.search('feat_files\(', line) or re.search('\(custom', line) : # correct the subjectID
print(re.sub(templatesubid, i, line), file=outfile, end='')
elif re.search(str(nptslist[2]), line): # correct the number of timepoints
print(re.sub(str(nptslist[2]), str(nvols[0]), line), file = outfile, end='')
else:
print(line, file=outfile, end='') # if nothing to do, just copy the line to the new text file.
我认为问题在于您在顶级if
语句中打印(将0
替换为该行),然后再次在{{1}的一个分支中打印挡在它下面。这个结果是一些(或所有)行加倍。
我实际上并没有很好地理解代码以找出合适的解决方案,但可能的开始可能是将您已评论的if/elif/else
更改为“更正主题ID”{{1} }。