これはプロの構造/階層を構築しようとしている私の最初のpythonプロジェクトです。Python:相対パスで非Pythonファイルをロードするサブディレクトリからモジュールをインポート
project/
---__init__.py
---main.py
---data_lib/
------__init__.py
------load.py
------file.csv
load.pyのコードは次のとおりです:私は、次のディレクトリ構造を持っている
import pandas as pd
def load_csv():
print pd.read_csv('file.csv')
if __name__=='__main__':
load_csv()
main.pyのコードは次のとおりです。
はfrom data_lib.load import load_csv
load_csv()
load.pyが実行されるとロードされたcsvファイルのpandasデータフレームのプリントアウトを取得します。 main.pyを実行すると、IOErrorエラーが発生します。File file.csvが存在しません。
if __name__=='__main__':
path_prefix=''
else:
path_prefix='data_lib/'
これは、標準溶液とプログラミングの練習ですか私はこれを回避し、代わりに何かをやるべき特にcsvファイルので、(:によって定義された「file.csvになり」の前に、私はパス接頭辞を追加することによってこの問題を解決することができます他のコードファイルがなければ定期的に更新する必要があります)あなたは意志、あなたがからモジュールを呼び出している場所は関係ありません
from os import path
path_prefix = path.dirname(path.abspath(__file__))
csv_path = path.join(path_prefix, 'file.csv')
この方法:
ありがとうございました。役立ち、簡単に変更できます。この例では、ファイルfile.csvに名前を付けることに問題があることが分かりました。読者は\ __ file__はビルドイン名であり、私のファイル名には関係していないことに注意してください! – Attack68
うん、 '__file__'はあなたのモジュールが呼び出されたファイルのパス名を与えるビルトインです。また、あなたの問題を解決する場合は、この回答を受け入れる価値があります。 –