Это прекрасно работает:
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.)
Сноска. В операционных системах, отличных от Micorsoft, не существует такого понятия, как расширение файла. Его присутствие в Windows происходит от MS-DOS и FAT, которые позаимствовали его у CP / M, который был мертв в течение десятилетий. Точка плюс три буквы, которые многие из нас привыкли видеть, является лишь частью имени файла в любой другой современной ОС, где оно не имеет встроенного значения.
.
. Для этого можно использоватьos.extsep
.