Greg Ewing
If we have a method for replacing the extension, I don't think we have a strong need a name for "all of the last name except the extension", because usually all you want that for is so you can add a different extension (possibly empty).
This is based on the false concept that there is one “extension” in a filename. On POSIX filesystems, that's just not true; filenames often have several suffixes in sequence, e.g. ‘foo.tar.gz’ or ‘foo.pg.sql’, and each one conveys meaningful intent by whoever named the file.
So I propose to avoid the term "basename" altogether, and just have
path.name --> all of the last component path.ext --> the extension
path.with_name(foo) -- replaces all of the last component path.with_ext(ext) -- replaces the extension
+1 on avoiding the term “basename” for anything to do with the concept being discussed here, since it already has a different meaning (“the part of the filename without any leading directory parts”). −1 on entrenching this false concept of “the extension” of a filename. -- \ Eccles: “I'll get [the job] too, you'll see. I'm wearing a | `\ Cambridge tie.” Greenslade: “What were you doing there?” | _o__) Eccles: “Buying a tie.” —The Goon Show, _The Greenslade Story_ | Ben Finney