こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。
pythonでファイルの入出力を行うとき、”os.path”モジュールを使ってパス設定をするのですが、もっとスマートなやり方をないかなぁ…と調べていたら
Python3.4で追加された、”pathlib”モジュールというものがあることを知りました。
本稿では、”pathlib”の便利な使い方を分かりやすく説明します。
本稿の終盤で、Jupyter Notebookを使って作成した”はやぶさ”の技術ノートも公開しますので、最後まで読んで頂けると嬉しいです。
Contents
はじめに
以降で説明するソースコードは、下記のディレクトリツリーで検証を行いました。
拡張子のないものはディレクトリです。
import
Python3.4以上を使う場合、あらゆるpath処理が”pathlib”一つで完結します。なので、importするのは”pathlib”のみでOKです。
カレント(現在位置)取得
以下のコードで、カレント(現在位置)を取得することができます。
ディレクト設定
”/” で簡単にディレクトリやパスを繋げることができます。
パスが存在するか確認
指定パスが存在するかどうか確認するには、以下のコードを使います。
True or False で有無が表示されます。
ファイル名取得(拡張子あり)
指定パスのファイル名を取得するに以下のコードを使います。
ファイル名取得(拡張子なし)
拡張子が不要な場合は下記のコードを使います。
拡張子のみ取得
拡張子のみ取得することもできます。
ファイル・フォルダの一覧取得(リスト化)
以下のコードで指定パスの中に保存されているファイル・フォルダをまとめて取得(リスト化)できます。
指定ファイルのみ取得(リスト化)
“img”ディレクトリ内にはtxtファイルとjpgファイルが混在していますが、下記のコードで、jpgファイルのみを取得(リスト化)することもできます。
生成リストのパス取得
上記のコードで生成したリストから、以下のコードでパスを取得できます。
これは、”pathlib”の使い方というより、リストとfor文の扱い方になります。
生成リストからファイル名のみ取得(拡張子あり)
パスなしのファイル名のみ取得することもできます。
生成リストからファイル名のみ取得(拡張子なし)
拡張子が不要な場合は下記のコードを使います。
生成リストからファイル名のみ取得して拡張子を変更する
上記のコードでファイル名のみ取得して、任意の拡張子に付け替えることもできます。例えば、今回の場合は、jpg⇒pngに付け替えます。
こちらも”pathlib”の使い方というより、pythonの文字列操作です。
ソースコード内で定義したリストの拡張子が変わっただけで、実際のファイル拡張子は変わりません。
”はやぶさ”の技術ノート(動作確認)
今まで説明したソースコードをJupyter Notebookで作成して動作確認を行った、”はやぶさ”の技術ノートを公開します。勉強用の教材やチートシートとして活用できます。
まとめ
パス操作は、地味だけど重要な作業です。(パスを間違えて動かないとか、よくある。。)python3.4以上を使う場合は、”pathlib”モジュールを使ってスマートにパスを扱いましょう!
”pathlib”の使い方が分からなくなったときは、本記事をご活用くださいな。