繁体   English   中英

python debug:在两个未知子字符串之间替换字符串

[英]python debug: replace string between two unknown substrings

这是我下面的python脚本,我尝试使用sub()通过使用连续变量n替换<StartNum></StartNum>之间的所有值,然后将结果写入新的文本文件。 任何人都可以指出错误吗?

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()

您的代码有一些问题。

  1. 您正在将文件f1读入数据,但是您将继续使用f1进行循环。 读取数据后,可以关闭文件。
  2. 您可能想要将线分开。 您可以通过多种方式执行此操作。 readlines方法可能是最直接的方法。
  3. 在循环中评估正则表达式时,它可能非常慢,因为必须在每次迭代时重新编译它。 相反,您可以提前编译正则表达式并使用它。
  4. 在您的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM