中学理科1627103 views
高校国語786032 views
高校化学2914696 views
高校倫理1434311 views
英語608813 views
雑学1472779 views
いろは2990790 views
高校物理158476 views
りんご195442 views
高校生物550095 views
Help
Tools

English

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 の方が簡潔に書けることがわかる。