2017-08-03 6 views
0

は、ディレクトリマップです:pythonを使ってサブディレクトリを呼び出す他のディレクトリからファイルをインポートするには?ここ

home 
|--main.py 
|files 
    |-----data 
      |-----data.py 
      |-----day 
        |-----001.csv 
    |-----main 
      |-----main.py 

data.py機能は、そのようなので001.csv

などのサブディレクトリとして日中にいくつかのファイルを呼び出します持って、私は私のmain.pyはこれを呼び出したいですdata.pyの関数

最初に使用します。

import os, sys 
lib_path = os.path.abspath('../data') 
sys.path.append(lib_path) 

from data import get_rt_data 

これで、インポートしたget_rt_dataを使用できます。

が、それはまだエラーがあります:

OSError: File 'day/001.csv' does not exist 

を001.csv

がどこにあるか私のmain.pyは知らないので、私は知っているが、私はそれを修正する方法がわかりません。

答えて

1

I know because my main.py don't where is 001.csv

あなたはそうです。だからあなたがする必要があるのは、それがどこにあるのかをmain.pyに伝えることです。それを行うにはいくつかの方法があります。最も簡単で最善の方法は、day/001.csvを読み込もうとするコードに絶対パスを渡すことです。 「day/001.csv」で現在行っている作業を行う代わりに、単にos.path.join(lib_path, "day/001.csv")を使用してください。次に、ファイルへの絶対パスを指定すると、プログラムはそのファイルの場所を知ります。

これは「lib_path」のセマンティクスを悪用しています。これはデータの読み込みにも使用されているためですが、ディレクトリを設定する方法の本質のようです。 lib_pathの名前をdata_pathのようなより正確な名前に変更するだけで、意味論的な問題を解決できます。

これには他にも多くの方法があります。考えられる1つのアイデアは、os.chdir(lib_path)を使用して、プロセスの現在の作業ディレクトリを変更することです。その後、あなたがしようとしていた通りにday/001.csvを開くことができます。しかし、作業ディレクトリを変更すると他の相対パスが変更され、記述したちょっとしたことから、実行ファイルがどこから変更されるのかを変更したくないので、私はこれに対して反対することをお勧めします。 csvファイルへの完全なパスを与えたいだけです。 001.csvの絶対パスは移動方法です。

+0

os.chdir(lib_path)!!! ありがとうございました。 –

関連する問題