ファイルパスから拡張子を取得するには os.path.splitext() または pathlib.Path.suffix を使う。
import os
path = 'document.pdf'
name, ext = os.path.splitext(path)
print(name) # document
print(ext) # .pdf
os.path.splitext() はファイル名を「拡張子より前」と「拡張子」に分割する。拡張子にはドットが含まれる。
pathlib を使う方法
pathlib では suffix プロパティで拡張子を取得できる。
from pathlib import Path
path = Path('document.pdf')
print(path.suffix) # .pdf
print(path.stem) # document
.tar.gz のような複数の拡張子を持つファイルでは、suffix は最後の .gz だけを返す。すべての拡張子を取得するには suffixes を使う。
from pathlib import Path
path = Path('archive.tar.gz')
print(path.suffix) # .gz
print(path.suffixes) # ['.tar', '.gz']
拡張子を変更する
pathlib の with_suffix() メソッドを使うと、拡張子を変更した新しいパスを取得できる。
from pathlib import Path
path = Path('document.txt')
new_path = path.with_suffix('.md')
print(new_path) # document.md
元のファイルが変更されるわけではなく、新しい Path オブジェクトが返される。実際にファイル名を変更するには rename() と組み合わせる。
from pathlib import Path
path = Path('document.txt')
path.rename(path.with_suffix('.md'))
拡張子を削除する
拡張子を削除するには with_suffix('') で空文字を指定する。
from pathlib import Path
path = Path('document.txt')
print(path.with_suffix('')) # document