您的代码有一些问题。
- 您正在将文件 f1 读入数据,但您继续向我们 f1 循环。读取数据后,您可以关闭文件。
- 您可能想要拆分线路。您可以通过多种方式做到这一点。该
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>