Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
os.path.join() / os.path.exists() / os.path.basename()
ファイルパスを組み立てたり、パスの各部分を取り出したりする『os.path』モジュールの関数です。OSの違い(Windows/Mac/Linux)を吸収して安全にパスを操作できます。
構文
import os # パスを結合します。 os.path.join(パス1, パス2, ...) # ファイル・ディレクトリが存在するか確認します。 os.path.exists(パス) # パスの末尾部分(ファイル名)を取得します。 os.path.basename(パス) # パスのディレクトリ部分を取得します。 os.path.dirname(パス) # 拡張子とファイル名を分割します。 os.path.splitext(パス) # 絶対パスに変換します。 os.path.abspath(パス)
関数一覧
| 関数 | 概要 |
|---|---|
| os.path.join(p1, p2, ...) | 複数のパス要素を結合して1つのパス文字列を返します。OS固有のパス区切り文字(『/』または『\』)を自動で使用します。 |
| os.path.exists(パス) | 指定したパスにファイルまたはディレクトリが存在する場合に『True』を返します。 |
| os.path.basename(パス) | パスの末尾部分(ファイル名またはディレクトリ名)を返します。 |
| os.path.dirname(パス) | パスのディレクトリ部分を返します。 |
| os.path.splitext(パス) | パスを『(ファイル名部分, 拡張子)』のタプルに分割して返します。 |
| os.path.abspath(パス) | 相対パスを絶対パスに変換して返します。 |
| os.path.isfile(パス) | パスが存在するファイルを指している場合に『True』を返します。 |
| os.path.isdir(パス) | パスが存在するディレクトリを指している場合に『True』を返します。 |
サンプルコード
import os
# join() でパスを安全に組み立てます。
base_dir = '/Users/user/documents'
filename = 'report.txt'
full_path = os.path.join(base_dir, 'reports', filename)
print(full_path) # 『/Users/user/documents/reports/report.txt』と出力されます。
# exists() でファイルの存在を確認します。
print(os.path.exists('/Users/user/documents')) # 存在すれば『True』が出力されます。
print(os.path.exists('/存在しないパス')) # 『False』と出力されます。
# basename() と dirname() でパスを分解します。
path = '/var/www/html/index.php'
print(os.path.basename(path)) # 『index.php』と出力されます。
print(os.path.dirname(path)) # 『/var/www/html』と出力されます。
# splitext() で拡張子を取り出します。
name, ext = os.path.splitext('photo.jpg')
print(name) # 『photo』と出力されます。
print(ext) # 『.jpg』と出力されます。
# 拡張子を変えた新しいファイル名を生成します。
src = 'document.txt'
dst = os.path.splitext(src)[0] + '.md'
print(dst) # 『document.md』と出力されます。
# abspath() で絶対パスを取得します。
print(os.path.abspath('.')) # カレントディレクトリの絶対パスが出力されます。
print(os.path.abspath('../data')) # 相対パスが絶対パスに変換されます。
# isfile() と isdir() で種別を確認します。
print(os.path.isfile('/etc/hosts')) # ファイルなら『True』が出力されます。
print(os.path.isdir('/etc')) # ディレクトリなら『True』が出力されます。
概要
『os.path.join()』はOSに応じた区切り文字(Windowsでは『\』、Mac/Linuxでは『/』)を使ってパスを結合します。パスを文字列結合(『+』演算子)で組み立てると環境によって動作が変わるため、必ず『os.path.join()』を使うのが安全です。
Python 3.4以降は同様の機能をよりオブジェクト指向的に扱える『pathlib』モジュールが利用できます。新しいコードでは『pathlib.Path』の使用が推奨されています。ただし既存のコードや外部ライブラリとの互換性のため、『os.path』が依然として広く使われています。
モダンなパス操作は『pathlib.Path()』を参照してください。ディレクトリ操作は『os.listdir() / os.makedirs() / os.remove()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。