【Python】パスからファイル名(拡張子なし)・フォルダ名・拡張子のみを取得する方法

時計 2020.09.11 / 時計

【Python】パスからファイル名(拡張子なし)・フォルダ名・拡張子のみを取得する方法

Pythonでアプリケーションを作成しているとき、パスから拡張子なしのファイル名のみが欲しい場面ってありますよね。
あと特定のファイルが保存されているフォルダのフォルダ名のみが欲しいときもありますよね。

でも安心してください!Pythonにはそんなときに使える便利なモジュールが用意されているんです。

今回はそんな場合に使える、パスからファイル名(拡張子なし)・フォルダ名のみを取得する方法を解説していきます。

使用するモジュール

今回はpython標準ライブラリのosモジュールを使用します。

osモジュールにより、フルパスからファイル名・拡張子・フォルダ名を抽出することができるんです!!

osモジュールを使いこなすことで、デスクトップアプリケーション作成に大いに役に立ちますよ。
またosモジュールは標準ライブラリなので、pipでのインストールは必要ないのです。

モジュールを使用するにはプログラム内でインポートしないと使えないですよね。プログラムの先頭で以下のようにインポートしてください。

import os

このosモジュールはファイル・フォルダの存在を確認することにも使われます。
詳しい使い方は以下記事をご参照ください。

ファイル名を取得する(os.path.basename())

フルパスからファイル名(拡張子付き)を取得する方法を解説します。
ここではパスを「C:\\Office54\\python\\FileName.pdf」とします。
※「\」をエスケープするために「\\」と記載しています(Windows環境のみ)

特定のパスからファイル名を取得するにはos.path.basename()を使用します。

os.path.basename()は渡されたパスのパス区切り記号(\)より後ろを返します。

import os

path = ' C:\\Office54\\python\\FileName.pdf '
filename = os.path.basename(path)
print(filename)
# FileName.pdf

ファイル名から拡張子を取り除く(os.path.splitext())

ファイル名から拡張子を取り除く場合は、os.path.splitext()を使用します。

os.path.splitext()を使用することで、取得したファイル名を拡張子なしのファイル名と拡張子の2つに分割してくれます!!

ファイル名と拡張子で分割された値はタプル型で返ってきます。

また具体的な拡張子とファイル名の分け方としては、渡されたパスの最後にあるドット.で分割する仕組みとなっております。

拡張子なしのファイル名が取得したい場合は、ファイル名と拡張子で分割されたタプル型の値を格納した変数の0番目を指定します。

import os

path = ' C:\\Office54\\python\\FileName.pdf '
filename = os.path.basename(path)
filename_no_extension = os.path.splitext(filename)[0]
print(filename_no_extension)
# FileName

分割した拡張子を取得したい場合は、ファイル名と拡張子で分割されたタプル型の値を格納した変数の1番目を指定します。

import os

path = ' C:\\Office54\\python\\FileName.pdf '
filename = os.path.basename(path)
extension = os.path.splitext(filename)[1]
print(extension)
# .pdf

これでフルパスからファイル名と拡張子を各々取得できるようになりましたね。
では次にパスからフォルダ名を取得する方法を見てみましょう。

フォルダ名を取得する(os.path.dirname())

パスからフォルダ名のみを取得するには、os.path.dirname()を使用します。

os.path.dirname()は、渡されたパスの最後のパス区切り記号(\)までの文字列を返します。

import os

path = ' C:\\Office54\\python\\FileName.pdf '
folderpath = os.path.dirname(path)
print(folderpath)
# C:\Office54\python

両方を同時に取得する(os.path.split())

場合によってはフォルダ名とファイル名(拡張子付き)の両方を取得したい場合ってありますよね、きっと。
私は今まで一度もありませんでしたけど。

もしそんな場面に遭遇したら、dirname()とbasename()を別々に使用するよりも、os.path.split()を使用すると便利です。

os.path.split()は、dirname()で取得できるフォルダパスと、basename()で取得できるファイル名の2つの文字列をタプルで返してくれます。

import os

path = ' C:\\Office54\\python\\FileName.pdf '
folderpath, filename = os.path.split(path)
print(folderpath)
# C:\Office54\python
print(filename)
# FileName.pdf

まとめ

私はWindows用のデスクトップアプリケーションでosモジュールをよく使用します。

例えば、PDFを結合・分解するアプリケーションであったり、対象ファイルの名前を自動的に変更するアプリケーションなどで使っています。

非常に応用の利くモジュールですので、ぜひマスターしてPythonでのアプリケーション作成などに役立ててください。