我有一个快速而肮脏的构建脚本,需要更新一个小的 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
我有两个问题:
- 后面的引用没有捕捉到我的期望。
<version>a.b.c</version>
例如,我没有得到 ,而是得到由控制字符包围的版本值。我试过加倍反斜杠,删除格式化的打印和其他一些东西,但不能完全正确。 - 当我将该行写回文件 (
print line
) 时,我得到了几个额外的换行符。
我在这儿闹什么?