Python: атомарно заменить файл через os.replace
Чтобы не оставить обрезанный файл при падении во время записи, сначала сохраните данные во временный файл рядом с целевым, затем замените его через os.replace. На одном filesystem замена атомарна.
Рабочий пример
import os
from pathlib import Path
target138 = Path("/tmp/settings-demo.json")
temporary138 = target138.with_suffix(".json.tmp")
temporary138.write_text('{"enabled": true}\n', encoding="utf-8")
os.replace(temporary138, target138)
print(target138.read_text(encoding="utf-8")) # {"enabled": true}Временный путь расположен рядом с целевым, чтобы rename не пересекал filesystem. Для более строгой устойчивости к потере питания дополнительно flush и fsync файла и каталога.
Частый вопрос
Можно ли заменить файл из другой папки?
Можно, если обе папки на одном filesystem. Между файловыми системами os.replace может завершиться ошибкой; создавайте временный файл в каталоге назначения.