我的文字是什么
$ 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行并将标签更改为新标签。除了标签行之外,新输出文本应该具有与之前相同的所有行。但它写得不好。有人可以帮忙吗?
答案 0 :(得分:1)
除了许多令人毛骨悚然但非关键的问题之外,你使用readlines()
在迭代过程中调用readline()
,导致你不是从文件的开头读取行,而是从当前读取fo
句柄的位置,即包含30411的行之后。
您需要使用单独的句柄再次打开输入文件,或者(更好)将最后4行存储在内存中,而不是重新读取您需要更改的行。