Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2013 07:05:38

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слов из списка

Добрый день, помогите, пожалуйста, с такой задачей. Есть два списка вида:

test1 = ['12', 'qq']
test2 = ['firsr', '33333']

Нужно в файле где встречаются слова из списка test1 заменить на второй список

Моя программа:
def Params(self, old_data, new_data, mapfile):
        file = open(mapfile, 'r') 
        text = file.read() 
        file.close()
        file = open(mapfile, 'w') 
        print len(old_data)
        
        for word_number in range(len(old_data)):
            file.write(text.replace(old_data[word_number], new_data[word_number]))
            
        file.close()


В итоге получается вот так:

firsr
qq12
33333

Т.е. замена происходит, но остаются элементы первого списка.

Заранее спасибо за помощь!



Отредактировано Rumato (Ноя. 6, 2013 07:23:34)

Офлайн

#2 Ноя. 6, 2013 08:45:07

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Замена слов из списка

qq12 нет в первом списке

Офлайн

#3 Ноя. 6, 2013 09:01:33

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слов из списка

В том-то и дело, что получается, что замена происходит примерно так: в первый элемент в 1-м списке, заменаяется на 1-й во 2-м, затем видмо записывается 2-й элемент из 1-го и потом снова замена 2-го из 1-го на второй и из второго а до этого дописывается 1-й из 1-го.

В общем проблема вот в qq12 — это 2-й и 1-й из первого списка.

Причём если списки из 1-го элемента, то тогда всё прекрасно работает.



Офлайн

#4 Ноя. 6, 2013 09:19:22

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Замена слов из списка

ты не правильно делаешь, ты дописываешь в файл всю строку много раз.

Офлайн

#5 Ноя. 6, 2013 09:29:22

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слов из списка

file.write — вынести из цикла?



Офлайн

#6 Ноя. 6, 2013 09:40:01

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Замена слов из списка

Да. В for произвести все замены в text, а затем сохранять. И что там делает self ?

Офлайн

#7 Ноя. 6, 2013 09:42:43

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слов из списка

self присутствует, это функция-метод класса



Офлайн

#8 Ноя. 6, 2013 10:42:57

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Замена слов из списка

И з приведённого кода этого не видно. Ну да ладно. Не стоит мудрить с индексами, выполняйте замены напрямую, например

for old, new in zip(old_data, new_data):
    text = text.replace(old, new)

Офлайн

#9 Ноя. 6, 2013 10:55:34

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слов из списка

Спсибо за помощь!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version