Форум сайта python.su
253
Задача - хранить в файле изменяемые данные. Файл типа 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)
Отредактировано doza_and (Ноя. 3, 2014 20:35:42)
Офлайн
Не по теме, но осмелюсь написать.
if not exc_type is None: --> if exc_type is not None:
Офлайн
857
Возьми io.StringIO, выполни туда запись, а потом уже из него в файл.
>>> import json >>> import io >>> >>> s = io.StringIO('start') >>> s.read() 'start' >>> json.dump([1, 2, 3], s) >>> json.dump([1, 2, 3], s) >>> s.seek(0) 0 >>> s.read() 'start[1, 2, 3][1, 2, 3]' >>>
Отредактировано py.user.next (Ноя. 4, 2014 02:50:40)
Офлайн