In comp.lang.python, Peter J. Holzer <hjp-pyt...@hjp.at> wrote: > On 2019-04-29 20:12:28 -0000, Grant Edwards wrote: >> Well, the FILES-11 filesystem on VAX/VMS did that automatically, but >> that's probably not too helpful. > Until this is finished you could use something like this: > > #!/usr/bin/python3 > > import os > > def open11(file, mode, **kwargs): > if "w" in mode: > try: > oldfile = os.readlink(file) > basename, version = oldfile.split(";") > except FileNotFoundError: > basename = os.path.basename(file) > version = 0 > newfile = basename + ";" + str(int(version) + 1) > os.unlink(file) > os.symlink(newfile, file) > return open(file, mode, **kwargs) > > > if __name__ == "__main__": > with open11("foo", "w") as f: > f.write("test1") > > with open11("foo", "w") as f: > f.write("test2") > > with open11("foo", "w") as f: > f.write("test3") > > :-)
Noted. > (WARNING: I haven't really tested this) No foo: Traceback (most recent call last): File "versioned-open", line 21, in <module> with open11("foo", "w") as f: File "versioned-open", line 15, in open11 os.unlink(file) FileNotFoundError: [Errno 2] No such file or directory: 'foo' There is a foo, but it's not a symlink: Traceback (most recent call last): File "versioned-open", line 21, in <module> with open11("foo", "w") as f: File "versioned-open", line 9, in open11 oldfile = os.readlink(file) OSError: [Errno 22] Invalid argument: 'foo' Parse error on version string: Traceback (most recent call last): File "versioned-open", line 21, in <module> with open11("foo", "w") as f: File "versioned-open", line 10, in open11 basename, version = oldfile.split(";") ValueError: not enough values to unpack (expected 2, got 1) etc (there are several possible parse errors: no semicolon, multiple semicolons, invalid literal for int()). That said, I do think it makes a reasonable suggestion for the stated versioning requirement. Elijah ------ bet a FAT filesystem would produce a different error -- https://mail.python.org/mailman/listinfo/python-list