Форум сайта python.su
Здравствуйте!
Я не программист, но возникла необходимость решить определённую задачу, прошу помочь…
Суть задачи - нужно в файле заменить определённое сочетание символов другим сочетанием.
Задачу я вообще то решил, но не совсем так, как хотелось бы:
import os
if os.access(“./Zamena-test.rtf”, os.F_OK):
print “файл найден”
else:
print “файл не найден”
import string
f_old = open(“./Zamena-rtf.txt”, “rt”)
f_new = open(“./Zamena-rtf-n.txt”, “wt”)
for l in fd.readlines():
a = string.find(l, “\\'db\\'db\\'db\\'db”)
if a > -1:
b = string.replace (l, “\\'db\\'db\\'db\\'db”, “\\'af\\'af”)
f_new.write(b)
else:
f_new.write(l)
f_old.close()
f_new.close()
os.rename(“./Zamena-rtf-n.txt”, “./Zamena-rtf.txt”)
То есть в процессе обработки создаётся новый файл, уже содержащий желаемые замены, затем исходный файл заменяется новым.
Теперь собственно вопрос:
Можно ли, и как сделать так, чтобы при обнаружении искомой комбинации в строке исходного файла, эту изменённую строку записывать прямо в исходный файл, не перезаписывая при этом строк исходного файла, не содержащих комбинацию, которую нужно изменить?
Спасибо!
Юрий.
Отредактировано (Янв. 27, 2007 14:25:11)
Офлайн
1) может проще заюзать sed команду, и не изобретать велосипед?)
2) а что мешает писать всё в переменную, которую потом обрабатывать и записать в исходный файл, открыв файл на запись?
хотя это приемлимо при небольших разерах файлов
есть вариант открывать/закрывать файл на запись, двигая указатель, но это тоже не сильно красиво
Офлайн
:)
f = open('test.txt', 'r+b')
pos = 0
for l in f.readlines():
f.seek(pos)
f.write(l.replace('aaa', 'bbb'))
pos = f.tell()
f.close()
Отредактировано (Янв. 27, 2007 22:38:40)
Офлайн