1

小さなxml設定ファイルの数行を更新する必要がある迅速で汚いビルドスクリプトがあります。ファイルが非常に小さいので、物事を単純にするためだけに、明らかに非効率的なプロセスを使用してファイルを適切に更新しています。

def update_xml(property, value):
  for line in fileinput.input(os.path.join(app_dir, 'my.xml'), inplace=True):
    if property is 'version':
      line = re.sub(r'(<version>).*?(</version>)', '\1%s\2' % value, line, flags=re.IGNORECASE)
    elif property is 'brand':
      line = re.sub(r'(<property name="brand" type="string">).*?(</property>)', '\1%s\2' % value, line, flags=re.IGNORECASE)
    elif property is 'env':
      line = re.sub(r'(<property name="env" type="string">).*?(</property>)', '\1%s\2' % value, line, flags=re.IGNORECASE)

    print line

私には2つの問題があります:

  • バックリファレンスは、私が期待するものをキャプチャしていません。<version>a.b.c</version>たとえば、を取得する代わりに、制御文字で囲まれたバージョン値を取得します。バックスラッシュを2倍にし、フォーマットされた印刷物などをいくつか削除しようとしましたが、正しく理解できません。
  • 行をファイル()に書き戻すと、print lineいくつかの余分な改行があります。

私はここで何をしているのですか?

4

2 に答える 2

0

を交換してみてください"\1%s\2" by "\g<1>%s\g<2>"。問題がある可能性があります。

改行については、既存の行の上に 2 番目の新しい行が追加されている可能性があります。

試すことができます:print line,コンマを使用して改行文字を抑制します

于 2013-03-12T14:20:02.080 に答える
0

未加工の文字列を使用して、制御文字になることを回避\1します。\2r'\1%s\2'

于 2013-03-18T07:54:24.877 に答える