PSM

プログラミング 初心者の メモ書き です

Pythonで実行ファイルから相対パスでデータを取得する

Pythonを触っていて,相対パス絶対パスの取得まわりで手間取ったので,メモしておきます.

環境
MacOS
Python3.6.0

はじめに

pythonでデータを読み込む際,データの絶対パスが必要なときがあります.
そんなとき,スクリプトとデータの相対関係(パス)さえわかっていれば,データの絶対パスが取得できます.

相対パスの取得のしかた

手順としては,

 0. osをインポートする
 1.スクリプトが置いてあるディレクトリの絶対パスを取得する
 2.「1で取得した絶対パス」と「スクリプトとデータの相対パス」をくっつける
 3.正規化する

の順に行います.
ただし,1で取得されるのは,スクリプトそのものの絶対パスではなく,スクリプトがあるディレクトリの絶対パスであることに注意が必要です.


ディレクトリ構造

hoge/
 ├ dataset/
 │ └ data
 └ script
   └ script.py

dataがcsvなどの読み込みたいデータ,script.pyが実行スクリプトです.


コード

import os
#スクリプトのあるディレクトリの絶対パスを取得
name = os.path.dirname(os.path.abspath(__name__)) 

#絶対パスと相対パスをくっつける
joined_path = os.path.join(name, '../dataset/data')

#正規化して絶対パスにする
data_path = os.path.normpath(joined_path)