Форум сайта python.su
0
Добрый день, помогите, пожалуйста, с такой задачей. Есть два списка вида:
test1 = ['12', 'qq'] test2 = ['firsr', '33333']
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()
Отредактировано Rumato (Ноя. 6, 2013 07:23:34)
Офлайн
47
qq12 нет в первом списке
Офлайн
0
В том-то и дело, что получается, что замена происходит примерно так: в первый элемент в 1-м списке, заменаяется на 1-й во 2-м, затем видмо записывается 2-й элемент из 1-го и потом снова замена 2-го из 1-го на второй и из второго а до этого дописывается 1-й из 1-го.
В общем проблема вот в qq12 — это 2-й и 1-й из первого списка.
Причём если списки из 1-го элемента, то тогда всё прекрасно работает.
Офлайн
47
ты не правильно делаешь, ты дописываешь в файл всю строку много раз.
Офлайн
0
file.write — вынести из цикла?
Офлайн
Да. В for произвести все замены в text, а затем сохранять. И что там делает self ?
Офлайн
0
self присутствует, это функция-метод класса
Офлайн
И з приведённого кода этого не видно. Ну да ладно. Не стоит мудрить с индексами, выполняйте замены напрямую, например
for old, new in zip(old_data, new_data): text = text.replace(old, new)
Офлайн
0
Спсибо за помощь!
Офлайн