mirror of
https://github.com/python/cpython
synced 2024-09-05 16:38:56 +00:00
![Serhiy Storchaka](/assets/img/avatar_default.png)
compatible with regular files (in particular it now supports the context management protocol).
27 lines
664 B
Python
27 lines
664 B
Python
from builtins import open as _orig_open
|
|
|
|
def open(file, mode='r', bufsize=-1):
|
|
if 'w' not in mode:
|
|
return _orig_open(file, mode, bufsize)
|
|
import os
|
|
backup = file + '~'
|
|
try:
|
|
os.unlink(backup)
|
|
except OSError:
|
|
pass
|
|
try:
|
|
os.rename(file, backup)
|
|
except OSError:
|
|
return _orig_open(file, mode, bufsize)
|
|
f = _orig_open(file, mode, bufsize)
|
|
_orig_close = f.close
|
|
def close():
|
|
_orig_close()
|
|
import filecmp
|
|
if filecmp.cmp(backup, file, shallow=False):
|
|
import os
|
|
os.unlink(file)
|
|
os.rename(backup, file)
|
|
f.close = close
|
|
return f
|