2015-07-24 3 views
1

У меня есть скрипт, который читает значения из одного файла и использует их для обновления полей в другом файле. Он отлично работает, если я делаю только одно обновление, но если я добавлю больше (прокомментированная строка), он сломается.Python Замените несколько строк в файле

import re 

def update_template(): 
    with open("dest.txt", "r") as template: 
     lines = template.readlines() 
    with open("dest.txt", "w") as template: 
     for line in lines: 
      template.write(re.sub(field_one, one, line)) 
      template.write(re.sub(field_two, two, line)) # <-- breaks here 

with open('source.txt') as source: 
    for line in source: 
     one = "value1" 
     two = "value2" 
     field_one = "replace1" 
     field_two = "replace2" 
     update_template(); 

Вызов функции для каждого обновления работает, но у меня много данных, поэтому я предпочел бы этого не делать. Есть идеи? Благодаря!

Edit: если у меня есть следующие в dest.txt:

replace1 
replace2 

после запуска я в конечном итоге с:

value1 
value1 
value1 
replace1 
replace2 
value2 
value2 
value2 

Там должны быть только 'ценности' в там ...

+2

Неужели вы не открываете тот же файл дважды? Вы сказали, что обновляете поля в * другом * файле, не так ли? –

+1

Что вы подразумеваете под словом "it breaks"? Сбой программы? Это просто не работает? – TWhite

+0

Предоставьте MCVE (http://stackoverflow.com/help/mcve). В противном случае мы не сможем вам помочь. – CrazyCasta

ответ

1

Похоже, вы пытаетесь записать одну и ту же строку в файл дважды, что может привести к возникновению проблемы. Попробуйте делать все ваши изменения line первым, а затем запись в файл:

with open("dest.txt", "w") as template: 
    for line in lines: 
    line = re.sub(field_one, one, line) # modify first 
    line = re.sub(field_two, two, line) 
    template.write(line) # write once after modifying 

Это, кажется, работает на моей машине при тестировании.

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