Задача - хранить в файле изменяемые данные. Файл типа json те надо переписывать полностью. Но данные отдают все подряд, могут подсунуть гадость для записи. Как не потерять данные которые были накоплены ранее? Не нашел красивого готового решения, налепил велосипед…:( Самому он противен.
import json
class safe_open:
u"""backup file then open for write, restore old version in the case of unhandled exceptions"""
def __init__(self, name,fun,*args):
self.name=name
self.bak=self.name+".bak"
self.fun=fun
self.args=args
def __enter__(self):
if os.path.exists(self.bak):
os.remove(self.bak)
if os.path.exists(self.name):
os.rename(self.name,self.bak)
self.f=self.fun(self.name,*self.args)
return self.f
def __exit__(self, exc_type, exc_value, traceback):
self.f.close()
if not exc_type is None:
if os.path.exists(self.bak):
os.remove(self.name)
os.rename(self.bak,self.name)
with safe_open("aaa.json",open,"wb") as f:
json.dump(safe_open,f)