Python パスから拡張子なしのファイル名を取得する

Muhammad Waiz Khan 2023年10月10日
  1. Python の pathlib.path().stem メソッドを使ってパスから拡張子のないファイル名を取得する
  2. パスから拡張子なしのファイル名を取得する Python の os.path.splitext()string.split() メソッドを使用する
  3. パスからファイル名を取得する Python の os.path.basename()os.path.splitext() メソッドを使用する
Python パスから拡張子なしのファイル名を取得する

このチュートリアルでは、Python でファイルパスから拡張子なしのファイル名を取得する様々な方法を実演します。例えば、Desktop/folder/myfile.txt のように、文字列の形で利用可能なファイルパスのリストからファイル名を取得することが目的で、拡張子 .txt のないファイル名 myfile だけを取得します。

Python の pathlib.path().stem メソッドを使ってパスから拡張子のないファイル名を取得する

path().stem メソッドはファイルのパスを入力として受け取り、それをファイルパスから抽出してファイル名を返します。例えば、パス Desktop/folder/myfile.txt から .txt の拡張子を除いた myfile を返します。

以下のコード例は、path().stem を用いてファイルパスから拡張子なしのファイル名を取得する方法を示しています。

from pathlib import Path

file_path = "Desktop/folder/myfile.txt"
file_name = Path(file_path).stem
print(file_name)

出力:

myfile

パスから拡張子なしのファイル名を取得する Python の os.path.splitext()string.split() メソッドを使用する

モジュールの ospath.splitext() メソッドはファイルパスを文字列として受け取り、出力としてファイルパスとファイル拡張子を返します。

ファイルパスからファイル名を取得したいので、まず os.path.splitext() メソッドを用いてファイルパスから拡張子を削除します。分割結果の最初の要素は拡張子のないファイルパスです。この結果はさらに / を区切り文字として用いて分割されます。最後の要素は拡張子なしのファイル名になります。以下のコード例では、path.splitext() メソッドと string.split() メソッドを用いてファイルパスから拡張子なしのファイル名を取得する方法を示します。

import os

file_path = "Desktop/folder/myfile.txt"

file_path = os.path.splitext(file_path)[0]
file_name = file_path.split("/")[-1]
print(file_name)

出力:

test

パスからファイル名を取得する Python の os.path.basename()os.path.splitext() メソッドを使用する

Python では、os モジュールの path.basename() メソッドはファイルパスを入力として受け取り、ファイルパスから抽出したベースネームを返します。例えば、Desktop/folder/myfile.txt のベースネームは myfile.txt です。

ファイルパスからファイル名を取得したいので、path.basename() メソッドを用いてベースネームを抽出し、path.splitext() を用いてファイル名を抽出します。以下のコード例は、path.basename() メソッドと path.splitext() メソッドを用いてファイルパスからファイル名を取得する方法を示しています。

import os

file_path = "Desktop/folder/myfile.txt"

basename = os.path.basename(file_path)
file_name = os.path.splitext(basename)[0]
print(file_name)

出力:

myfile
警告
ファイル名が myfile.tar.gz のような場合、上で説明したすべてのメソッドは myfile.tar をファイル名として返します。

例えば、Desktop/folder/myfile.tar.gz のパスから myfile.tar の代わりに myfile のように . の後の部分を除いたファイル名を取得したい場合、string.index() メソッドを用いて myfile.tar から myfile だけを抽出することができます。しかし、このメソッドの欠点は、my.file.tar.gz のように . がファイル名の一部である場合、my をファイル名として返してしまうことです。

以下のコード例では、string.index() を用いて .tarmyfile.tar の出力から削除する方法を示します。

file_name = "myfile.tar"
index = file_name.index(".")
file_name = file_name[:index]
print(file_name)

file_name = "my.file.tar"
index = file_name.index(".")
file_name = file_name[:index]
print(file_name)

出力:

myfile
my

関連記事 - Python File