2016-10-05 4 views
2

Python関数が存在するフォルダにアクセスするにはどうすればよいですか?カスタムPython関数が存在するアクセスフォルダ

たとえば、N×2のデータ配列があるとします。最初の列は独立変数、2番目は従属変数です。私は元の独立変数に範囲が含まれている別の配列の独立変数でこのデータを補間する必要があります。この手順は、さまざまな範囲の独立変数を持つ複数の異なるコードで使用されるため、このデータファイルを複数の場所にコピーする必要はありません。私はこれを実現する単一の関数を書いて、その関数自体を含むフォルダ内のデータの単一コピーを作成したいと考えています。

私の例の試みは、以下のとおりです。

import numpy as np 
from scipy.interpolate import splev, splrep 

def function(some_array): 
    filepath = './file_path_in_the_function_folder.txt' 
    some_data = np.loadtxt(filepath) 

    interpolated_data = splev(some_array, splrep(some_data[:,0], some_data[:,1])) 

    return interpolated_data 

しかし、./、むしろそれが機能をインポートするスクリプトの現在の作業ディレクトリに指示し、機能の場所を認識しません。どうすればこの問題を回避できますか?このよう

+0

パス '.'は、現行の" py "ファイルへのパスではなく、proecssが開始されたディレクトリである現在の作業ディレクトリに対して有効です。それには '__file__'変数を使います。 – zvone

答えて

1

import os 

my_dir = os.path.dirname(__file__) 
fname = 'file_path_in_the_function_folder.txt' 
filepath = os.path.join(my_dir, fname) 

としてはdata modelに説明し、あなたは現在のモジュールのパスを取得するため__file__名前を使用することができます。 Python 3.4以降では絶対パスです。以前のバージョンでは、絶対パスか相対パスかを簡単に知ることはできませんが、通常は気にする必要はありません。

+0

my_dir = os.path.dirname(__ file__)を別の.pyファイルに入れてインポ​​ートすると、次のエラーメッセージが表示されます。IndentationError:インデントが外側のインデントレベルと一致しません... – astrapios

+0

それは完全に機能します。 。どういうわけか私のヴィムがファイルを乱してしまった。ありがとうございました!! – astrapios

関連する問題