0

我是 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 循环导致了这种双重输出?

4

1 回答 1

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到该行)中打印,然后在其下if/elif/else方块的一个分支中再次打印。这个结果是一些(或所有)行被加倍。

我实际上并没有很好地理解代码以制定适当的修复程序,但一个可能的开始可能是将if您评论的“更正主题 ID”更改为elif.

于 2012-11-21T00:44:12.867 回答