Если вы не хотите закрывать и снова открывать файл, чтобы избежать условий гонки, вы можете truncate
it:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()
Функциональность также может быть чище и безопаснее с использованием with open as
на комментарий mVChr, что закроет обработчик, даже если произойдет ошибка.
with open(filename, 'r+') as f:
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()