这个很好用:
os.path.join(dir_name, base_filename + '.' + filename_suffix)
请记住,
os.path.join()
之所以存在,是因为不同的操作系统使用不同的路径分隔符字符。它可以平滑地处理这种差异,使跨平台代码不必为每个操作系统编写特殊情况。对于文件名 "扩展名"(见脚注),没有必要这样做,因为它们始终在每个实现它们的操作系统上都由点字符前缀。
如果使用函数让您感觉更好(并且您喜欢不必要地使代码复杂化),可以这样做:
os.path.join(dir_name, '.'.join((base_filename, filename_suffix)))
如果您喜欢保持代码的整洁,只需在后缀中包含点号:
suffix = '.pdf'
os.path.join(dir_name, base_filename + suffix)
这种方法也恰好与pathlib中的后缀约定兼容,该库在Python 3.4中引入,比这个问题提出的时间晚了几年。不需要向后兼容的新代码可以这样做:
suffix = '.pdf'
pathlib.PurePath(dir_name, base_filename + suffix)
你可能会想要使用更短的
Path()
而不是
PurePath()
,如果你只处理本地操作系统的路径。鉴于原始问题背后的跨平台问题,我会质疑这个选择。
警告:不要使用pathlib的
with_suffix()
来实现此目的。如果
base_filename
包含一个点,该方法将损坏它。
脚注:在微软操作系统之外,不存在所谓的文件名“扩展名”。它在Windows上的存在来自于MS-DOS和FAT,这两者都从已经死亡几十年的CP/M中借鉴了它。许多人习惯于看到的那个点加三个字母只是其他现代操作系统上文件名的一部分,它没有内置的含义。