【Python】パスの文字列からファイル名や拡張子を取得する方法

プログラムの中でインプット/アウトプットとしてファイルを使用する際に、ファイル名だけを取り出したいとかいう場面は多々あります。

文字列分割でもファイル名は取得できますが、あまりスマートではありません。

今回は、Pythonでパスからファイル名や拡張子を取得する方法を紹介します。

os.pathを使う

パスの文字列からファイル名やフォルダ名、拡張子を取得するためには、Pythonの標準ライブラリであるosのpathモジュールを使います。

標準ライブラリなのでpipやcondaでインストールする必要はありません。

今回は、以下のパスを例とします。

import os

path = "C:/Users/nao/sample/otameshi/架空のファイル.txt"

ファイル名を取得する

ファイル名を取得するにはos.path.basename()を使います。引数にパスの文字列を渡します。

os.path.basename(path)

>> '架空のファイル.txt'

os.path.basename()では拡張子付きのファイル名が返されます。

拡張子なしのファイル名を取得する

拡張子なしのファイル名を取得するためには、 先ほどのos.path.basename()とos.path.splitext()を機組み合わせます。

os.path.splitext()は拡張子とそれ以外の文字列を分割し、タプルで返します。

os.path.splitext(os.path.basename(path))

>> ('架空のファイル', '.txt')

これの最初を指定すると、ファイル名を取得できます。

os.path.splitext(os.path.basename(path))[0]

>> '架空のファイル'

拡張子を取得する

拡張子のみを取得したい場合には、 os.path.splitext()の2番目の要素を指定します。

os.path.splitext(os.path.basename(path))[1]

>> '.txt'

ただし、このままではドット(.)が含まれてしまっています。

ドット(.)なしで拡張子を取得する

ドットが不要な場合は、上記からさらにスライスで、2文字目以降を指定します。

os.path.splitext(os.path.basename(path))[1][1:]

>> 'txt'

フォルダを取得する

ファイル名は含めず、フォルダ名だけを取得したい場合にはos.path.dirname()を用います。

os.path.dirname(path)

>> 'C:/Users/nao/sample/otameshi'

ファイルが存在するフォルダ名を取得する

パスにあるファイルが存在しているフォルダ名を取得するには、 os.path.dirname()と先述のos.path.basename()を組み合わせます。

os.path.basename(os.path.dirname(path))

>> 'otameshi'

つまるところ、os.path.basename()は最後のスラッシュ(/)の後ろの文字列を返してくれるみたいです。

まとめ

Pythonでファイル名や拡張子、フォルダ名を取得する方法を紹介しました。大量のファイル名を扱う場合などは、今回の方法は非常に有効になると思います。

パスの文字列を自在に操って、ファイルやフォルダ名の操作を楽にしていきましょう^^

ではでは👋