gpt4 book ai didi

python 调试: replace string between two unknown substrings

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:56 24 4
gpt4 key购买 nike

下面是我的 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()

最佳答案

您的代码存在一些问题。

  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>

关于 python 调试: replace string between two unknown substrings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com