为什么这段代码不会替换此文本?

时间:2014-03-30 18:43:51

标签: python python-2.7 python-3.x

我有这段代码:

count = -1
with open("text.txt", "r") as f:
    content = f.readlines()
for line in content:
    if line.startswith("  <Vertex>"):
        count += 1
        line = line.replace(str(line), str("  <Vertex> " + str(count) + " {\n"))
        continue
    else:
        pass
with open("text2.txt", "w") as f:
    f.writelines(content)

当它运行时,它应该用" <Vertex>"替换任何以" <Vertex> 0 {"开头的行,或者计数所在的任何数字。

当我运行它时,它执行正常,但是当我打开新的text2.txt文件时,它与text.txt完全相同。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您不是回写line,而是为变量行指定一个新的字符串引用。您需要按如下方式写回内容数组:

count = -1
with open('text.txt', 'r') as f:
    content = f.readlines()

for index, line in enumerate(content):
    if line.startswith('  <Vertex>'):
        count += 1
        content[index] = line.replace(str(line), str("  <Vertex> " + str(count) + " {\n"))

with open('text2.txt', 'w') as f:
    f.writelines(content)

看看它是否适合你

您可能还需要考虑改进逻辑,因为这只适用于非常具体的模式。

例如,您可以将line.startswith(" <Vertex>")替换为line.contains('<Vertex>'),因为假设您使用XML,这应该会给您相同的结果

编辑:您可以采取其他一些措施来改进您的代码,但我不想用信息轰炸您。请参阅以下评论者的建议,了解如何使其更加优化(尽管我假设您的工作规模不会产生任何影响)