def VersionFile(file_spec, vtype='copy'): import os, shutil ok = 0 if os.path.isfile(file_spec): # or do other error checking... if vtype not in ('copy', 'rename'): vtype = 'copy' # determine root file name so the extension doesn't get longer and longer... n, e = os.path.splitext(file_spec) # is e an integer? try: num = int(e) root = n except ValueError: root = file_spec # find next available file version for i in xrange(1000): new_file = '%s.%03d' % (root, i) if not os.path.isfile(new_file): if vtype == 'copy': shutil.copy(file_spec, new_file) else: os.rename(file_spec, new_file) ok = 1 break return ok if __name__ == '__main__': # test code (you will need a file named test.txt) print VersionFile('test.txt') print VersionFile('test.txt') print VersionFile('test.txt')