这是我下面的python脚本,我尝试使用sub()
替换<StartNum>
和</StartNum>
之间的所有值,使用变量连续数n
然后,写结果到一个新的文本文件。
任何人都可以指出错误吗?
import re
f1 = open('name.xml', 'r')
f2 = open('result.txt', 'w')
data=f1.read()
n=5000
for line in f1:
f2.write(re.sub('<StartNum>(.*)</StartNum>', r'<StartNum>%s</StartNum>' % str(n), data))
if "<StartNum>" in line:
n=n+1
f1.close()
f2.close()
答案 0 :(得分:1)
您的代码存在一些问题。
readlines
方法可能是最直接的方法。 re.sub
中,您使用的是data
作为来源,而您确实需要该行。您可以采取其他措施来改进代码,但上面列出的代码非常必要。
我猜这可能会做你想要的。
import re
f1 = open('name.xml', 'r')
f2 = open('result.txt', 'w')
data = f1.readlines()
f1.close()
n = 5000
rex = re.compile('<StartNum>(.*)</StartNum>')
for line in data:
f2.write(rex.sub(r'<StartNum>%s</StartNum>' % str(n), line))
if "<StartNum>" in line:
n += 1
f2.close()
给出
的names.xml<root>
<StartNum>1</StartNum>
<StartNum>5</StartNum>
<StartNum>8</StartNum>
<StartNum>9</StartNum>
<StartNum>13</StartNum>
<StartNum>33</StartNum>
<foo>
<bar baz="5" />
</foo>
</root>
result.txt将是:
<root>
<StartNum>5000</StartNum>
<StartNum>5001</StartNum>
<StartNum>5002</StartNum>
<StartNum>5003</StartNum>
<StartNum>5004</StartNum>
<StartNum>5005</StartNum>
<foo>
<bar baz="5" />
</foo>
</root>