В отличие от большинства попыток ручного разделения строк, os.path.splitext будет корректно обрабатываться /a/b.c/d как не имеющий расширения вместо того, чтобы иметь расширение .c/d, и будет обрабатываться .bashrc как не имеющий расширения вместо того, чтобы иметь расширение .bashrc: