Лучше, чем? Вы можете, например, перетасовать данные в файле, а затем обрезать их, используя меньше памяти, но больше ища (особенно, если вы адаптируете это, чтобы не читать последнюю часть в одном фрагменте):
def cutfile(file, startcut, endcut):
file.seek(endcut)
dataafter=file.read()
file.seek(startcut)
file.write(dataafter)
file.truncate()
Или вы не можете удалить старый файл перед переименованием, чтобы получить атомарные обновления. Это действительно зависит от ваших целей.