text: _orig_open = open
  
  class _BkFile:
  	def __init__(self, file, mode, bufsize):
  		import os
  		self.__filename = file
  		self.__backup = file + '~'
  		try:
  			os.unlink(self.__backup)
  		except os.error:
  			pass
  		try:
  			os.rename(file, self.__backup)
  		except os.error:
  			self.__backup = None
  		self.__file = _orig_open(file, mode, bufsize)
  		self.closed = self.__file.closed
  		self.fileno = self.__file.fileno
  		self.flush = self.__file.flush
  		self.isatty = self.__file.isatty
  		self.mode = self.__file.mode
  		self.name = self.__file.name
  		self.read = self.__file.read
  		self.readinto = self.__file.readinto
  		self.readline = self.__file.readline
  		self.readlines = self.__file.readlines
  		self.seek = self.__file.seek
  		self.softspace = self.__file.softspace
  		self.tell = self.__file.tell
  		self.truncate = self.__file.truncate
  		self.write = self.__file.write
  		self.writelines = self.__file.writelines
  
  	def close(self):
  		self.__file.close()
  		if self.__backup is None:
  			return
  		import filecmp
  		if filecmp.cmp(self.__backup, self.__filename, shallow = 0):
  			import os
  			os.unlink(self.__filename)
  			os.rename(self.__backup, self.__filename)
  
  def open(file, mode = 'r', bufsize = -1):
  	if 'w' not in mode:
  		return _orig_open(file, mode, bufsize)
  	return _BkFile(file, mode, bufsize)
  