Python でファイルの拡張子を取得・変更する

ファイルパスから拡張子を取得するには 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']

拡張子を変更する

pathlibwith_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