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の分岐の1つで再度印刷していることだと思います。if/elif/elseこの結果、一部 (またはすべて) の行が 2 倍になります。

適切な修正を行うのに十分なほどコードを実際に理解していませんでしたが、if「subjectID を修正してください」とコメントした をelif.

于 2012-11-21T00:44:12.867 に答える