あなたが含むモジュールがあるとしましょう
_myfile = open('test.txt', 'r')
_
また、「test.txt」ファイルは同じフォルダにあります。モジュールを実行すると、ファイルが正常に開かれます。
ここで、別のフォルダにある別のモジュールからそのモジュールをインポートするとします。ファイルは、そのコードがあるモジュールと同じフォルダーで検索されません。
モジュールを同じフォルダー内の相対パスでファイルを最初に検索する方法は?
「___file__
_」または「os.getcwd()
」を使用してさまざまな解決策がありますが、open()またはfile( )。
解決策は__file__
そしてそれはかなりきれいです:
import os
TEST_FILENAME = os.path.join(os.path.dirname(__file__), 'test.txt')
.py
ファイルからロードされた通常のモジュールの場合、 __file__
が存在し、使用可能である必要があります。 __file__
からの情報を相対パスに結合するには、2014年以降に利用可能なos.path
インターフェースよりも新しいオプションがあります。
from pathlib import Path
here = Path(__file__).parent
with (here/'test.txt').open() as myfile:
...
pathlib
はPythonに追加されました- PEP428 を参照してください。まだPython 2.7同じAPIを使用したい場合 バックポートが利用可能 。
利用可能な最新のアプローチの適用に関心のあるユーザーは、ソースツリーに関連するデータファイルを結合するのではなく、 importlib-resources に移動することを検討する必要があります。現在、互換性をPython 3.7+のみ)に制限する贅沢を持っているユーザーはほとんどいないため、これを最先端にいることを好む人へのヘッズアップとして言及します。