Python

【Python】ファイルパスからファイル名や拡張子を取得する

MAX

ファイルの存在チェックなどと同様に、ファイル名、拡張子のチェックなども、ファイル操作を行う前にチェックが必要。

従来はosモジュールをimportして使うことが多かったが、オブジェクト指向的に書けるpathlibのPathをimportして使うことも多い。

好みの問題かもしれないが、同じパスを何度も使い回す場合、Pathを使った方が見やすくなる気がする。

スポンサーリンク

ファイル名を取得する

ファイル名を取得する方法は以下の通り。

1import os
2from pathlib import Path
3
4path_name = "./test/test.csv"
5# osを使う場合
6# os.path.basenameでファイル名取得可能
7os.path.basename(path_name)
8# 実行結果
9# test.csv
10
11# Pathを使う場合
12path = Path(path_name)
13# Path.nameでファイル名取得可能
14print(path.name)
15# test.csv

最後のパス区切り文字以降をファイル名として取得するため、拡張子がない場合は以下のような動作になる。

1# 最後の区切り文字以降をファイル名として取得するため、
2# basenameやnameだけでは正確にはファイルなのかディレクトリなのかが判断できないことに注意。
3path_name = "./test/test"
4
5os.path.basename(path_name)
6# 実行結果
7# test
8
9path = Path(path_name)
10print(path.name)
11# test

basenameやnameだけではファイルかディレクトリかの判断はつかないため注意。

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

拡張子を取得する処理は以下の通り。

1import os
2from pathlib import Path
3
4path_name = "./test/test.csv"
5
6# 「.」で文字列を分割する
7path, ext = os.path.splitext(path_name)
8print(path)
9# ./test/test
10print(ext)
11# .csv
12
13_path = Path(path_name)
14# stemで拡張子を除くファイル名を取得
15print(_path.stem)
16# test
17# suffixで拡張子を取得
18print(_path.suffix)
19# .csv

os.path.splitextを使うと、拡張子の前と拡張子以降がタプルとして返ってくる。

なお、拡張子のないファイル(「.」のないファイル)の場合、拡張子部分は空文字(””)が返ってくる。

Pathを使う場合、stemで拡張子を除くファイル名を、suffixで拡張子を取得できる。

ディレクトリとファイル名に分割する

パスをディレクトリとファイル名ん分割する処理は以下の通り。

1import os
2from pathlib import Path
3
4path_name = "./test1/test2/test.csv"
5
6path, filename = os.path.split(path_name)
7print(path)
8# ./test1/test2
9print(filename)
10# test.csv
11
12_path = Path(path_name)
13print(_path.parent)
14# test1/test2
15print(_path.name)
16# test.csv

os.pathの場合splitを使うことで、最後のパス区切り文字で区切られて、タプルで返ってくる。

Pathを使う場合、parentで親ディレクトリ部分、nameでファイル名を取得できる。

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました