2017-06-02 12 views
0

は、私たちは今、私は2つの質問があり、私のPythonパッケージPythonパッケージ内のファイルと関数の参照。

packman 
weights.py 
    functions: 
    weigh() 
    force() 
relatives.py 
    functions: 
    roll() 
    torque() 
__init__.py 
data 
    work.txt 
    rastor.txt 

のディレクトリ構造を見てみましょう。

まず、weights.pyの中の関数weigh()からwork.txtにアクセスしたいとします。どのように扱うのですか? は、私は最初のコードがメイン内で実行されている場合、このメソッドは正常に動作しますが、この

f = open("data/work.txt") 

てみました。しかし、それはパッケージとして使用されているときに、ファイルを検索するために失敗し、それが問題を提起

FileNotFoundError: [Errno 2] No such file or directory: 'data/work.txt'

がどのように私はwork.txtのアドレスは、それがより普遍的にするために書くべき?

私の他の質問は、weights.pyの関数weigh()をrelatives.pyのroll()関数から呼びたいときです。どうすればいいですか?

答えて

0

私は通常、私のアプリケーションのためにmain.pyまたは同様の単​​一エントリポイントを持っています。

import os 

app_location = os.path.dirname(os.path.abspath(__file__)) 

今、あなたは他のモジュールにこの場所を渡すことができますまたは多分彼らの場所を得るためにそれらに同じ考えを使用します。そして、私は自分のアプリケーションのパスを取得するには、このような何かを行うことができます。ちょうどあなたのrelatives.pyスクリプトにweightsをインポートし、weights.weigh()

を呼び出して、あなたの2番目の質問については

data_location = os.path.join(app_location, 'data', 'work.txt') 
with open(data_location) as f: 
    # do something with the file object 
    for line in f: 
     print(line) 

:あなたは今、この場所を持っているので、簡単にこのような何かを行うことができます