2017-07-11 14 views
2

私はPythonプロジェクトの一部に取り組んでおり、その構造は次のようなものです: project/some_folder/another_folder/my_work入出力ファイルのパスを正しく設定する方法は?

このフォルダでは、コードを含むファイルはrun.pyです。 同じフォルダには、input_fileもあります。そこからデータを読み込んで処理し、結果をoutput_fileに書き込みます。

with open("input_file") as f: 
    do_something() 

with open("output_file") as f: 
    store_the_result() 

私はproject/some_folder/another_folder/my_workでコードを実行すると、これが正常に動作します: だからrun.pyで私のようなものを持っています。 しかし、私がprojectに行き、python -m some_folder.another_folder.my_work.runを使ってコードを実行すると、入力ファイルにアクセスするのが難しくなります。 ファイルへのabosluteパスを使用してこの問題を解決しようとしましたが、これは自分のマシンでのみ機能します。誰かが自分のマシンに自分のコードをコピーしても、ハードコードされた絶対パスを変更する必要があります。

入力ファイルと出力ファイルを含むフォルダでプログラムを起動するか、モジュールとして実行するようにファイルへのパスを設定する方法と、ファイルへのパスを変更する必要はありませんマシン上でコードを実行していますか?

答えて

2

あなたが実行されているモジュールへのパスを取得し、そこから比較的完全なパスを作成することができます。

import os 

module_path = os.path.dirname(os.path.realpath(__file__)) 

input_path = os.path.join(module_path, 'input_file') 
output_path = os.path.join(module_path, 'output_file') 

with open(input_path) as f: 
    do_something() 

with open(output_path) as f: 
    store_the_result() 
+0

'module_path = os.path.dirname(os.path.realpath(__ file __))'は私にとっては機能しません。代わりに 'module_path = os.path.dirname(os.path.realpath(" __ file __ "))'を使用する必要があります。 – s9527

+0

これは奇妙です。私が '' __file __ "'(引用符を使用)を使用すると、モジュールディレクトリではなく、現在の作業ディレクトリが得られます。さらに、 '' __file __ "'を使うと '' __some_random_string __ "'と同じ結果が得られます。それがうまくいかないと言ったら、それはエラーを投げることを意味しますか? –

+0

私のケースでは、 '' __file __ "'もCWDを与えますが、 '__file__'は単に' NameError:name '__file__' not defined'をスローします。 – s9527

0

を明示的に「INPUT_FILE」のパスを指定しない場合は、Pythonのは、それが現在に存在することを前提としていPythonスクリプトを実行しているディレクトリ。 Paco Hの答えは問題を解決するはずです。

関連する問題