Python
のファイル操作用のモジュールpathlib
というものがあります。
pathlib
は、一連のファイル操作を一つのモジュールでこなせる非常に強力なモジュールです。
pathlib
を使用すれば、特定のパスからファイル名やフォルダ名、拡張子を抽出するのも簡単です!
しかし、実際に使用する際には、次のような問題に直面することも:
- ファイル名やフォルダ名を抽出するときは、どうするの?
- 拡張子だけ抽出することもできる?
こういった疑問を解決するために、この記事ではpathlib
のフォルダ名やファイル名等の抽出方法を図解付きで解説していきます。
フォルダ名、ファイル名抽出の基本手順
ファイル名・フォルダ名抽出の基本手順は次の通りです。
手順 | スクリプトの例 |
---|---|
1. pathlib からPath クラスをインポート |
from pathlib import Path |
2. 対象のパスのPath オブジェクト作成 |
Path("パス") |
3. Pathオブジェクトのプロパティで各種抽出 | Path.XXX |
ここでは、Path
オブジェクトを作るところから始めましたが、もちろん既存のPath
を使ってもOKです。
まずは実行例を紹介して、ファイル検索が想像以上に簡単だということをお伝えしたいと思います。
フォルダ内ファイル検索の実行例
例として、次のようなサンプルパスを考えてみます。
# "C:\Users\YUTAKA\folder\file.txt"
このパスでPath
オブジェクトを作成して、フォルダ名、ファイル名、拡張子をそれぞれ抽出してみます。
# pathlibからPathクラスをインポート
from pathlib2 import Path
# 検索対象フォルダのPathオブジェクト作成
MY_FILE = Path(r"C:\Users\YUTAKA\folder\file.txt")
# 親フォルダの抽出
MY_FILE.parent
# WindowsPath('C:/Users/YUTAKA/folder')
# ファイル名の抽出
MY_FILE.name
# 'file.txt'
# 拡張子の抽出
MY_FILE.suffix
# '.txt'
簡単に親フォルダ、ファイル名、拡張子を抽出できましたね。
以下で、頻繁に利用する抽出内容と対応するプロパティの一覧を紹介していきます。
フォルダ・ファイル名抽出方法一覧
フォルダ名、ファイル名関連の抽出方法を次の表に一覧でまとめています。
抽出例は、次のサンプルパスの場合の抽出例です。
# "C:\Users\YUTAKA\folder\file.txt"
抽出内容 | プロパティ | 抽出例 |
---|---|---|
フォルダ名 | .name |
⇒'file.txt' |
フォルダ名(拡張子除く) | .stem |
⇒'file' |
拡張子 | .suffix |
⇒'.txt' |
親フォルダ | .parent |
⇒WindowsPath('C:/Users/YUTAKA/folder') |
親フォルダ(リスト形式) | .parents |
⇒WindowsPath('C:/Users/YUTAKA/folder') WindowsPath('C:/Users/YUTAKA') WindowsPath('C:/Users') WindowsPath('C:/') |
ドライブ | .drive |
⇒'C:' |
ルート | .root |
⇒'\\' |
サンプルパスで、各プロパティが対応する位置を図解すると次のようになります。
以下で、サンプルパスを使用した場合の実行例を確認してみましょう。
ファイル名の抽出
ファイル名の抽出は、.name
プロパティを参照します。
一見覚えにくいのですが、次のように連想して覚えると忘れにくいです。
- ファイル名 ⇒ 名 ⇒ 名前 ⇒
name
サンプルパスで実行例を確認してみましょう。
MY_FILE.name
# 'file.txt'
また、ファイル名の拡張子を除いた部分を抽出したい場合は、.stem
プロパティを参照します。
MY_FILE.stem
# 'file'
拡張子の抽出
ファイル名の抽出は、.suffix
プロパティを参照します。
サンプルパスで実行例を確認してみましょう。
MY_FILE.suffix
# '.txt'
親フォルダ(ディレクトリ)の抽出
親フォルダ(ディレクトリ)の抽出は、.parent
プロパティを参照します。
.parent
プロパティは、Pathオブジェクトを返す点に注意しましょう。
サンプルパスで実行例を確認してみましょう。
MY_FILE.parent
# WindowsPath('C:/Users/YUTAKA/folder')
.parents
プロパティを参照すると、親フォルダ、親の親、親の親の親…をリスト形式で取得できます。
parent_folders = MY_FILE.parents
parent_folders[0]
# WindowsPath('C:/Users/YUTAKA/folder')
parent_folders[1]
# WindowsPath('C:/Users/YUTAKA')
parent_folders[2]
# WindowsPath('C:/Users')
parent_folders[3]
# WindowsPath('C:/')
parent_folders[4]
# IndexError
0から順に一つ上の親フォルダに対応します。
親フォルダの上限を超えるインデックスを与えると、IndexError
になります。
親フォルダ内のファイルやフォルダを検索した場合は、.glob()
メソッドで検索につなげる良いです。
- 【参考】
Path.glob()
メソッドによるファイル検索について、次の記事でわかりやすく解説しています。
ドライブ・ルートの抽出
ドライブおよびルートの抽出には、それぞれ.drive, .rootプロパティを使用します。
MY_FILE.drive
# 'C:'
MY_FILE.root
# '\\'
その他のパス取得方法
最後にPathオブジェクトから、取得できるその他のパスについて紹介します。
抽出内容 | メソッド | 適用 |
---|---|---|
カレントフォルダ | .cwd() |
現在の作業フォルダ |
ホームディレクトリ | .home() |
Windows: "C:¥Users¥ユーザー名" Mac: "/Usesrs/ユーザー名" Linux: "/home/ユーザー名" |
カレントフォルダ
現在のカレントフォルダ(ディレクトリ)を取得する際は、".cwd()"
メソッドを使用します。
.cwd()
は、Current Working Directoryの頭文字と覚えましょう。
pythonファイルが、'C:/Users/YutaKa/作業フォルダ'
にあるとすると次のような挙動になります。
MY_FILE.cwd()
# WindowsPath('C:/Users/YutaKa/作業フォルダ')
これは、Path(".").absolute()
でも取得できます。
Path(".").absolute()
# WindowsPath('C:/Users/YutaKa/作業フォルダ')
ホームディレクトリ
ホームディレクトリは、OSによって異なりますが、基本的にユーザー名のフォルダです。
OS | ホームディレクトリ |
---|---|
Windows | "C:¥Users¥ユーザー名" |
Mac | "/Usesrs/ユーザー名" |
Linux | "/home/ユーザー名" |
Windows環境で、ユーザー名がYutaKaの例で実行例を確認してみましょう。
MY_FILE.home()
# WindowsPath('C:/Users/YutaKa')
Pythonで作業を効率化する方法
今回はpathlib
で、フォルダ名、ファイル名、拡張子等を抽出する方法を解説しました。
Python
を使えば、簡単なスクリプトで作業を劇的に効率化することも可能です!
Python
の効率化関係で言えば、次の記事で紹介しているような本が自動化の本がおススメです。