Pythonでファイル名、拡張子、ディレクトリ名を取得

ファイルのフルパスからファイル名や拡張子を取得したいことは、Python3に限らずよくあることですね。各言語で独特な処理になりがちですが、覚えておくと便利です。

ファイルパスから拡張子を分離

利用機会が多いのは、フルパスのファイル名を拡張子とそれ以外に分離する処理です。タプルにインデックスを使って、「extname = os.path.splitext(fullpath)[1]」のようにどちらか一方を取得することもできます。

import os

fullpath = "/path/to/a.b.txt"
print(fullpath)

filename, extname = os.path.splitext(fullpath)
print(filename)
print(extname)

実行結果:

/path/to/a.b.txt
/path/to/a.b
.txt

ファイルパスをディレクトリと拡張子に分離

動作として分り易いのは、フルパスのファイル名をディレクトリとファイル名に分離する処理です。タプルにインデックスを使って、「extname = os.path.split(fullpath)[1]」のようにどちらか一方を取得することもできます。

import os

fullpath = "/path/to/a.b.txt"
print(fullpath)

filename, extname = os.path.split(fullpath)
print(filename)
print(extname)

実行結果:

/path/to/a.b.txt
/path/to
a.b.txt

上記の「os.path.split()」と同様の処理は、「os.path.dirname()」「os.path.basename()」の二つの関数を使って実現できます。

import os

fullpath = "/path/to/a.b.txt"
print(fullpath)

dirname = os.path.dirname(fullpath)
print(dirname)
filename = os.path.basename(fullpath)
print(filename)

実行結果:

/path/to/a.b.txt
/path/to
a.b.txt

ファイル名の「a.b」の部分を取得したいときは、合わせ技を使います。

import os

fullpath = "/path/to/a.b.txt"
print(fullpath)

filename = os.path.splitext(os.path.basename(fullpath))[0]
print(filename)

実行結果:

/path/to/a.b.txt
a.b

まとめ

ファイルの拡張子を取得できる「os.path.splitext()」は、ぜひ覚えておきたい処理です。ディレクトリとファイル名を分離する処理もついでに覚えるのでしたら、「os.path.split()」は似ているので覚え易いかも知れません。

fullpath = “/path/to/a.b.txt”結果
os.path.splitext(fullpath)(‘/path/to/a.b’, ‘.txt’)
os.path.split(fullpath)(‘/path/to’, ‘a.b.txt’)
os.path.dirname(fullpath)/path/to
os.path.basename(fullpath)a.b.txt
Pythonでファイル名、拡張子、ディレクトリ名を取得