この記事では、Pythonのコード内からファイルのパスを取得する方法を解説します。
パスを取得することで任意の場所にフォルダやファイルを作成したりできます。また、パスからファイル名を抜き出したり、絶対パスを取得したりすることも可能です。
それでは、パスの色々な取得方法を見ていきましょう!
実行中のファイルのパスを取得する
実行中のファイルのパスを取得するには、__file__属性から参照できます。
/Users/user/Desktop/Python/file.py
__file__には、実行中のファイルのパスが格納されています。
print(f'__file__: {__file__}')
Python 3.8以下では、Pythonコマンドで実行する際に指定したパスが返されます。
$ python3 Desktop/Python/file.py __file__: Desktop/Python/file.py
Python 3.9からは、必ず絶対パスが返されるようになった。
$ python3 Desktop/Python/file.py __file__: /Users/user/Desktop/Python/file.py
パスからファイル名のみを抜き出す
パスからファイル名を取得するには、osモジュールのpath.basename()を使う。
import os print(os.path.basename(__file__))
実行結果
file.py
パスから絶対パスを取得する
osモジュールのpath.abspath()を使うことでパスから絶対パスを取得できます。
import os print(os.path.abspath(os.path.basename(__file__)))
実行結果
/Users/user/Desktop/Python/file.py
パスからディレクトリを取得する
osモジュールのpath.dirname()を使うことでパスからディレクトリを取得できる。
import os print(os.path.dirname(__file__))
実行結果
/Users/user/Desktop/Python
カレントディレクトリの絶対パス
osモジュールのgetcwd()は、カレントディレクトリの絶対パスを取得できます。
import os print(os.getcwd())
実行結果
/Users/user/Desktop/Python
ユーザーが現時点で作業を行っているディレクトリのこと。作業フォルダとも呼ばれる。
ディレクトリに格納されているファイル名を取得
osモジュールのwalk関数を使うことで引数に指定したディレクトリに格納されている全てのファイル名とディレクトリ名を取得することができます。
import os os.walk(パス)
指定したディレクトリ内にディレクトリが格納されている場合、その格納されているディレクトリの中身も取得されます。
例えば、以下のようなファイルがあった場合、

※ libディレクトリ と main.py は、同じディレクトリ内に格納されています。
この時、main.pyからlibディレクトリの中身を表示してみます。
main.py
import os for d, s, f in os.walk('lib'): print(f'd: {d}') print(f's: {s}') print(f'f: {f}\n')
実行結果
d: lib s: ['text'] f: ['file2.py', 'file1.py'] d: lib/text s: [] f: ['text.txt']
dはディレクトリ名、sはサブディレクトリ名、fはファイル名を取得しています。
このように、指定したディレクトリに格納されているファイル名とサブディレクトリ名を取得でき、なおかつサブディレクトリ内のファイル名も再帰的に取得できます。
正規表現でファイル名を取得する
globモジュールのglob()を使うことでpathname引数に指定したパターンにマッチしたファイル名を取得できます。
import glob glob.glob(pathname, *, recursive=False)
ディレクトリ内のすべてのファイルの取得
例えば、以下のようなファイルがあったとして、
main.pyからdirディレクトリ内に格納されている全てのファイル名を取得してみます。
main.py
import glob import os # ディレクトリのパス dir_path = 'dir' # dir/* path = os.path.join(dir_path, '*') print(glob.glob(path))
実行結果
['dir/file.py', 'dir/text1.txt', 'dir/text2.txt']
ディレクトリ内の全てのファイル名を取得できました。
特定の拡張子のファイルのみを取得する
先ほどのdirディレクトリからテキストファイルのみを取得してみます。
import glob import os dir_path = 'dir' # dir/*.txt path = os.path.join(dir_path, '*.txt') print(glob.glob(path))
実行結果
['dir/text1.txt', 'dir/text2.txt']
*に.txtを付けました。これにより拡張子が.txtのファイルのみマッチします。
まとめ
この記事では、Pythonでパスを取得する方法を解説しました。
うまいことパスを取得することで特定の拡張子のファイルをまとめて処理したりできます。walk関数やglob()は便利なのでぜひ使ってみてください。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ


