Как заменить (или удалить) расширение из имени файла в Python?

Есть ли в Python встроенная функция, которая заменяет (или удаляет) расширение имя файла (если оно есть)?

Пример:

print replace_extension('/home/user/somefile.txt', '.jpg')

В моем примере: /home/user/somefile.txt станет /home/user/somefile.jpg

Я не знаю, имеет ли это значение, но мне нужно это для модуля SCons, который я пишу. (Так, может быть, есть какая-то особая функция SCons, которую я могу использовать?)

Я бы хотел что-нибудь clean . Выполнение простой замены строки всех вхождений .txt внутри строки, очевидно, не является чистым. (Это не удастся, если мое имя файла somefile.txt.txt.txt )

87
задан Kara 11 January 2016 в 23:19
поделиться

2 ответа

Попробуйте os.path.splitext, это должно сделать то, что вы хотите.

import os
print os.path.splitext('/home/user/somefile.txt')[0]+'.jpg'
122
ответ дан 24 November 2019 в 07:44
поделиться

Как сказал @jethro, splitext — это удобный способ сделать это. Но в этом случае довольно легко разделить его самостоятельно, так как расширение должно быть частью имени файла, идущей после последней точки:

filename = '/home/user/somefile.txt'
print( filename.rsplit( ".", 1 )[ 0 ] )
# '/home/user/somefile'

rsplit указывает Python выполнить строка разбивается, начиная с правой стороны строки, и 1 говорит, что необходимо выполнить не более одного разделения (так что, например, 'foo.bar.baz' -> [ 'foo.bar', 'баз' ). Поскольку rsplit всегда будет возвращать непустой массив, мы можем безопасно проиндексировать в него 0, чтобы получить имя файла без расширения.

28
ответ дан 24 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: