Обнуление json при перезаписи
Есть код
import json
up = 5
with open("test.json", "w") as write_file:
json.dump(up, write_file)
Он записывает значение переменной up в файл test.json Но можно заметить, что файл test.json обнуляется( = 0 байт) во время выполнения строчки:
with open("test.json", "w") as write_file:
Это можно нагляднее увидеть, если добавить задержку перед командой dump:
import json
import time
up = 5
with open("test.json", "w") as write_file:
time.sleep(1)
json.dump(up, write_file)
Это нормально, так как после обнуления в него записываются новые данные. Но
Тогда при аварийном закрытии программы появляется вероятность потерять содержимое json файла
Есть ли какие-нибудь стандартные и не очень способы избежать это?
Ответы (1 шт):
Один вариант, для особо ценных данных:
- переименовываете старый
jsonв другое имя (в конце приписываете дату-время этого переименования) - записываете новый
jsonв обычное имя.
Плюсы:
- у вас есть все версии
json, всегда можно откатиться на какую-то из них
Минусы:
- тратиться место
Другой вариант, с экономией места:
- копируете старый
jsonв имя.old - пишете новый
jsonв обычное имя - удаляете старый
jsonсовсем
Плюсы:
- у вас практически при любом развитии событий есть
jsonс обычным его именем (ну или хотя бы имя.old, если процесс записи как-то сломался)
Минусы:
- хранится только одна, последняя версия
json(ну или две версии - имя.old можно не стирать)
Можно ещё как-то комбинировать эти и другие варианты. Например, можно архивировать старые версии в zip архив через неделю и т.п., как это обычно делают с нужными логами.