小さな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
いくつかの余分な改行があります。
私はここで何をしているのですか?