プログラムの中でインプット/アウトプットとしてファイルを使用する際に、ファイル名だけを取り出したいとかいう場面は多々あります。
文字列分割でもファイル名は取得できますが、あまりスマートではありません。
今回は、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でファイル名や拡張子、フォルダ名を取得する方法を紹介しました。大量のファイル名を扱う場合などは、今回の方法は非常に有効になると思います。
パスの文字列を自在に操って、ファイルやフォルダ名の操作を楽にしていきましょう^^
ではでは👋