Есть ли в 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
)
Попробуйте os.path.splitext, это должно сделать то, что вы хотите.
import os
print os.path.splitext('/home/user/somefile.txt')[0]+'.jpg'
Как сказал @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
, чтобы получить имя файла без расширения.