【Python】辞書型の色々なループ
MAX
MAX999blog
ファイルの存在チェックなどと同様に、ファイル名、拡張子のチェックなども、ファイル操作を行う前にチェックが必要。
従来は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でファイル名を取得できる。