はじめに
今回は、Pythonでファイルパスからファイル名(拡張子なし)を取得する方法について学びました。
使用環境は以下のとおりです。
- PC: MacBook Air (11-inch, Early 2015)
- OS: macOS バージョン11.6(20G165)
- Pythonバージョン: 3.8.8(64-bit)
背景
抽出したCSVファイルの中に、データを識別するような名前がなかったため、
「それならファイル名自体をデータ名として使えば良いのでは」と思い立ちました。
実際に行った処理
① 必要なモジュールのインポート
まず、os
モジュールをインポートします。
import os
② ファイルパスからファイル名を取得
たとえば、読み込んだファイルのパスが filepath
に格納されているとします。
basename = os.path.basename(filepath)
この処理で、filepath
の末尾にある**ファイル名(例:data_2024.csv
)**がbasename
に代入されます。
③ 拡張子を除いたファイル名を取得
続いて、拡張子(.csv など)を取り除きたい場合は、次のようにします。
filename_no_extension = os.path.splitext(basename)[0]
このコードを使えば、**拡張子を除いたファイル名(例:data_2024
)**だけを取得できます。
※ os.path.splitext(basename)
は、ファイル名と拡張子をタプル形式で分割する関数です。
splitext(basename)[0]
→ ファイル名splitext(basename)[1]
→ 拡張子(例:.csv
)
試行錯誤したこと
初めは、次のようにsplit()
を使って拡張子を取り除こうとしました。
basename.split('.csv')
結果、分割はできたものの、リスト形式で返ってきたためうまくファイル名だけを抽出するのが面倒でした。
その後、調べていく中でos.path.splitext()
を知り、よりシンプルかつ安全に処理できる方法として採用しました。
まとめ
- ファイル名を取得するには、
os.path.basename(filepath)
を使用。 - 拡張子を除去するには、
os.path.splitext()
を使用。 split()
でも可能だが、意図しない結果や拡張性の低さがあるため、標準関数の方が推奨される。
今回の学習を通じて、ファイルパス処理には専用の関数を使うのが確実であることを再確認できました。
今後はさらにos.path
やpathlib
などの活用を深めていきたいと考えています。