りんご198413 views
中学理科1627838 views
雑学1472959 views
高校化学2916128 views
高校日本史190051 views
高校倫理1435514 views
高校物理158718 views
いろは2995081 views
高校生物550332 views
Computer366119 views

Python でファイル名から拡張子を除いた部分を取得する(stem, splitext)

ファイル名から拡張子を除いた部分(ベース名)を取得するには os.path.splitext() または pathlib.Path.stem を使う。

import os

path = 'document.pdf'
name, ext = os.path.splitext(path)

print(name)  # document

os.path.splitext() はファイル名を拡張子の前後で分割するため、最初の要素が拡張子を除いた部分になる。

pathlib の stem を使う

pathlib では stem プロパティで直接取得できる。

from pathlib import Path

path = Path('document.pdf')
print(path.stem)  # document

stem は最後の拡張子だけを除くため、.tar.gz のようなファイルでは .tar が残る。

from pathlib import Path

path = Path('archive.tar.gz')
print(path.stem)  # archive.tar

すべての拡張子を除く

複数の拡張子をすべて除きたい場合は、stem を繰り返し適用するか、拡張子がなくなるまでループする。

from pathlib import Path

path = Path('archive.tar.gz')

while path.suffix:
    path = Path(path.stem)

print(path)  # archive

または suffixes の長さ分だけ処理する方法もある。

from pathlib import Path

path = Path('archive.tar.gz')
name = path.name

for suffix in path.suffixes:
    name = name.removesuffix(suffix)

print(name)  # archive

ディレクトリパスからファイル名部分を取得する

フルパスからファイル名部分だけを取得するには os.path.basename() または Path.name を使う。

import os
from pathlib import Path

full_path = '/home/user/documents/report.pdf'

# os.path
print(os.path.basename(full_path))  # report.pdf

# pathlib
print(Path(full_path).name)  # report.pdf

ファイル名から拡張子を除くには、これを splitext()stem と組み合わせる。

import os
from pathlib import Path

full_path = '/home/user/documents/report.pdf'

# os.path
basename = os.path.basename(full_path)
name = os.path.splitext(basename)[0]
print(name)  # report

# pathlib
print(Path(full_path).stem)  # report

pathlib の方が簡潔に書けることがわかる。