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

标签 python python-2.7

我的文字是什么

$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/

相关文章:

python - 将字符串文件转换为所需格式 : replace/with _ except the ones before comma

python - 如何将文件导入到python中

python - 根据条件在 Pandas Dataframe 中插入行

list - 如何在字典列表中向字典添加键?

python - 我应该将哪种模板技术与 CherryPy 一起使用?

python - 从 LevelDB ".ldb"文件恢复数据

python-2.7 - Python 2.7和OpenCV 3.3

Python电话类---打印无

python - 可靠地获取调用函数的文件路径

python - 替换我的功能的更好方法?