Python provides good utilities for transforming filenames, but they are tedious to use and clutter up the source code.
FileSpec offers one-stop shopping to convert a file path to every component you might want to know, reuse, or transform.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
class FileSpec(object): def __init__(self, path): self.drive, self.path_minus_drive = os.path.splitdrive(path) self.dir, self.name = os.path.split(path) self.corename, self.ext = os.path.splitext(self.name) self.ext = self.ext.lower() self.dir_minus_drive = self.dir[2:] def substitute_drive(self, drive): return os.path.join(drive, os.sep, self.path_minus_drive) def substitute_dir(self, dir_): return os.path.join(dir_, self.name) def substitute_name(self, name): return os.path.join(self.dir, name) def substitute_corename(self, corename): return os.path.join(self.dir, corename + self.ext) def substitute_ext(self, ext): return os.path.join(self.dir, self.corename + ext)
There's nothing deep or magical about this code snippet, but I reuse it all the time. I often convert files or rename them in some fashion. Python gives me everything I need to accomplish such tasks; however, it's always tedious.
Now I create a FileSpec for a path in one line of code. Then quickly and simply I create a new path in a second line without thinking about splitting this, then joining that.