我有一个快速而脏的构建脚本,需要在一个小的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
)时,我会收到几个额外的换行符。我在这里做什么?
答案 0 :(得分:0)
尝试替换"\1%s\2" by "\g<1>%s\g<2>"
,这可能是问题..
关于换行符,打印件可能会在现有行上添加第二行。
你可以尝试:print line,
用逗号来压制新的行字符
答案 1 :(得分:0)
使用原始字符串以避免\1
和\2
成为控制字符:r'\1%s\2'