2017-10-31 22 views
0

モジュールレベルのグローバルと同じディレクトリにあるファイル(data.csv)からデータをロードするPythonスクリプト(dataloader.py)があります。モジュールを実行するとデータファイルが正しく読み込まれますが、別のディレクトリのファイル(main.py)からモジュールをインポートすると、データファイルを見つけることができません。インポート時にローカルファイルをロードする

マイファイル構造:

main.py 
myModule/ 
    __init__.py 
    dataloader.py 
    data.csv 

インポートはどこからでも呼び出すことができる場合はどのようにして、インポート時にローカルファイルからデータを読み込むことができますか?

答えて

1

__file__は、常に現在のファイルを返します。

dataReader = csv.reader(os.path.dirname(__file__) + "/data.csv") 
+0

私はあなたの答えが似ていますが、うまくいきません。 'dirname'はパス' __file__'のディレクトリコンポーネントを返しますが、 '__file__'はファイル名だけでパスはありません。おそらく、 'os.path.abspath(__ file__)+ ...'を意味しています。 答えを編集してください。 また、文字列 '/'の代わりに 'os.path.sep'を使って、OSから抽象化することもできます。パッケージからリソースをロードする方法については、 'pkgutil.get_data(package、resource)'も参照してください。 – progmatico

+0

私にとって、 '__file__'はファイルへのパスとファイル自体を含んでいます。 'os.path.dirname'は私に必要なフォルダの絶対パスを与えます。リテラル '/'を使うと、WindowsとPOSIXの両方で動作します。 – jebob

+0

あなたはそうです(申し訳ありません)。モジュールがインポートされている場合、それは途中で尋ねられたものです。しかし、スクリプトでは、スクリプトのファイル名だけが直接実行されます(これが私の間違いにつながりました)。だから、常に "常に現在のファイルを返す"が、必ずしも完全なパスではない。 '/'の詳細を知らなかった。ニース。 – progmatico

関連する問題