Python PR

【Python】ファイルのパスを取得する方法

記事内に商品プロモーションを含む場合があります

この記事では、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()は便利なのでぜひ使ってみてください。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ