説明
ディレクトリやファイルのパスの結合
動作確認環境:Python3.6 / macOS 10.13.5
「os.path.join()」を使う
ファイルやディレクトリを取り扱うプログラミングで
パスを編集して文字列にしたいときがある。
この時、意識しなければならないのが
実行するOS毎に区切り文字が異なる、ということだ。
このことを気にしながらプログラムするのは、結構めんどくさい。
例えば、Windowsの区切り文字はバックスラッシュ( \ )だが、
MacやLinux ではスラッシュ(/)を使う。
いろいろなOSで動作するプログラムを書こうと思ったら
個々の対応が必要になってしまう。
そんなときに使うのが、Pythonなら、join()である。
こんな感じ。
spath = os.path.join(A, B)
spathには、AとBをOS毎の区切り文字で結合した値が入る。
ちなみに、join()の引数は、いくつでもOK
spath = os.path.join(A, B, C, D)
spathには、AとBとCとDをOS毎の区切り文字で結合した値が入る。
ex.1 デスクトップ上のファイルのフルパスを編集
あるディレクトリ上のファイルのフルパスを編集してみよう。
ここで、デスクトップのパスは、「/Users/taka/Desktop/python」
ファイル名は「sample.py」とすると
import os spath = os.path.join('/Users/taka/Desktop/python', 'sample.py') print('ex.1 :' + spath)
(実行結果)
ex.1 :/Users/taka/Desktop/python/sample.py
というように、パスとファイル名を
区切り文字’/’で結合してフルパスが出来上がる。
(Macの場合)
ex.2 複数の要素からディレクトリ名を編集
編集したいパスの階層を構成する要素を結合する
以下のような4階層のディレクトリのパス
ディレクトリ1:Users (rootディレクトリ配下)
ディレクトリ2:taka
ディレクトリ3:Desktop
ディレクトリ4:python
import os spath = os.path.join('/Users', 'taka', 'Desktop', 'python') print('ex.2 :' + spath)
(実行結果)
ex.2 :/Users/taka/Desktop/python
ex.1と同様、区切り文字’/’で結合してパスが出来上がる。
このようにjoin()で結合するのは
ディレクトリ名の要素でもいいし、ディレクトリ名とファイル名でもいい。
とにかくパスとなる文字列を要素でつなぎたいときに
ほいほい使える便利な関数なのである。
ex.3 複数の要素からディレクトリ名を編集
ex.2のように編集したいパスの階層を構成する要素を結合するとき
join()には、要素をリストで渡すことも出来る。
以下のような4階層のディレクトリのパス(ex.2と全く同じ)
ディレクトリ1:Users (rootディレクトリ)
ディレクトリ2:taka
ディレクトリ3:Desktop
ディレクトリ4:python
import os tblx = ['/Users', 'taka', 'Desktop', 'python'] spath = os.path.join(*tblx) print('ex.3 :' + spath)
(実行結果)
ex.3 :/Users/taka/Desktop/python
ex.2と同じ結果が得られる。
なお、join()に渡す文字列の最後を空文字にすると
区切り文字で終わるパスを生成させることが出来る。
import os tblx = ['/Users', 'taka', 'Desktop', 'python', ''] spath = os.path.join(*tblx) print('ex.4 :' + spath)
(実行結果)
ex.4 :/Users/taka/Desktop/python/
自分の家のパソコンでしか動かさないとしても
join()を使っていれば、
OSのバージョンアップなどで
いきなり区切り文字の仕様が変わっても
問題を回避出来る可能性が高い。
Pythonバンザイ