2016-07-06 2 views
1

Что мой текстЗамена строки в файле в Python

$ TITLE = XXXX YYYY
1 $ SUBTITLE = XXXX YYYY ANSA
2 $ LABEL = первая метка
3 $ ПЕРЕМЕЩЕНИЯ
4 $ MAGNITUDE-ФАЗА ВЫХОДА
5 $ подслучай ID = 30411

Что я хочу

$ TITLE = XXXX YYYY
1 $ ПОДЗАГОЛОВОК = XXXX YYYY АНС
2 $ ЗАГОЛОВКА = новая этикетка
3 $ ПЕРЕМЕЩЕНИЯ
4 $ ВЕЛИЧИНЫ-ФАЗА ВЫХОД
5 $ подслучай 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

Ли строка буквально говорит '2 $ LABEL' или является' $ LABEL' прокси-сервером для всего, что находится в файле? –

+1

Это, скорее всего, буквально. Это какой-то файл управления выходными данными FEM. Но ОП пытается отправиться из Лондона в Нью-Йорк через Южную Африку. –

+0

Проблема в том, что после поиска subase..it должен написать новый ярлык три строки назад. Выход, который у меня есть, записывает его в том же месте, то есть в последней строке. Кажется, я не думаю о другом подходе. –

ответ

1

Помимо многих чудовищных, но некритических проблем, вы звоните readlines() в середине итерации с помощью readline(), в результате чего вы читать строки не с начала файла, а из текущего положения fo ручки, т.е. после строки, содержащей 30411. Вам нужно снова открыть входной файл с помощью отдельного дескриптора или (лучше) сохранить последние 4 строки в памяти, а не перечитывать тот, который вам нужно изменить.

Смежные вопросы