Найти - Пользователи
Полная версия: Замена слов из списка
Начало » Python для новичков » Замена слов из списка
1
Rumato
Добрый день, помогите, пожалуйста, с такой задачей. Есть два списка вида:
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

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

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

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

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

Причём если списки из 1-го элемента, то тогда всё прекрасно работает.
bismigalis
ты не правильно делаешь, ты дописываешь в файл всю строку много раз.
Rumato
file.write — вынести из цикла?
dimy44
Да. В for произвести все замены в text, а затем сохранять. И что там делает self ?
Rumato
self присутствует, это функция-метод класса
dimy44
И з приведённого кода этого не видно. Ну да ладно. Не стоит мудрить с индексами, выполняйте замены напрямую, например
for old, new in zip(old_data, new_data):
    text = text.replace(old, new)
Rumato
Спсибо за помощь!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB