ファイルのフルパスからファイル名や拡張子を取得したいことは、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 |