我的文字是什么
$TITLE = XXXX YYYY
1 $SUBTITLE= XXXX YYYY ANSA
2 $LABEL = first label
3 $DISPLACEMENTS
4 $MAGNITUDE-PHASE OUTPUT
5 $SUBCASE ID = 30411
我想要什么
$TITLE = XXXX YYYY
1 $SUBTITLE= XXXX YYYY ANSA
2 $LABEL = new 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 行并将标签更改为新的标签。新的输出文本应具有与以前相同的所有行(标签行除外)。但它写得不正确。有人可以帮忙吗?
最佳答案
除了许多令人毛骨悚然但不重要的问题之外,您在使用 readline()
的迭代中间调用 readlines()
,导致您读取的行不从文件开头开始,但从 fo 句柄的当前位置开始,即包含 30411 的行之后。
您需要使用单独的句柄再次打开输入文件,或者(更好)将最后 4 行存储在内存中,而不是重新读取需要更改的行。
关于python - 在python中替换文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38227125/