Pythonでファイルパスを結合する

説明

ディレクトリやファイルのパスの結合

動作確認環境: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バンザイ

タイトルとURLをコピーしました