在python中替换文件中的字符串

时间:2016-07-06 14:52:56

标签: python python-2.7

我的文字是什么

  

$ TITLE = XXXX YYYY
  1 $ SUBTITLE = XXXX YYYY ANSA
  2 $ LABEL =第一个标签
  3 $ DISPLACEMENTS
  4 $ MAGNITUDE-PHASE OUTPUT
  5 $ SUBCASE ID = 30411

我想要什么

  

$ TITLE = XXXX YYYY
  1 $ SUBTITLE = XXXX YYYY ANSA
  2 $ LABEL = 新标签
  3 $ DISPLACEMENTS
  4 $ MAGNITUDE-PHASE OUTPUT
  5 $ SUBCASE ID = 30411

我正在使用的代码

import re
fo=open("test5.txt", "r+")
num_lines = sum(1 for line in open('test5.txt'))
count=1
while (count <= num_lines):
    line1=fo.readline()
    j= line1[17  : 72]
    j1=re.findall('\d+', j)
    k=map(int,j1)       
    if (k==[30411]):
        count1=count-4
        line2=fo.readlines()[count1]
        r1=line2[10:72]  
        r11=str(r1)
        r2="new label"
        r22=str(r2)
        newdata = line2.replace(r11,r22)
        f1 = open("output7.txt",'a')
        lines=f1.writelines(newdata)
    else:
        f1 = open("output7.txt",'a')
        lines=f1.writelines(line1)
    count=count+1

问题在于写作。一旦搜索到30411,它就必须返回3行并将标签更改为新标签。除了标签行之外,新输出文本应该具有与之前相同的所有行。但它写得不好。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

除了许多令人毛骨悚然但非关键的问题之外,你使用readlines()在迭代过程中调用readline(),导致你不是从文件的开头读取行,而是从当前读取fo句柄的位置,即包含30411的行之后。 您需要使用单独的句柄再次打开输入文件,或者(更好)将最后4行存储在内存中,而不是重新读取您需要更改的行。