たとえば、
C:\ 42 \ main.py
と
C:\ 42 \ info.txt
があり、main.pyからinfo.txtを読みたい場合は、「C:\ 42\info.txt」と入力する必要があります。 「「info.txt」だけのインスタッド。
そんなはずなの?
そうでない場合、どうすれば修正できますか?
たとえば、
C:\ 42 \ main.py
と
C:\ 42 \ info.txt
があり、main.pyからinfo.txtを読みたい場合は、「C:\ 42\info.txt」と入力する必要があります。 「「info.txt」だけのインスタッド。
そんなはずなの?
そうでない場合、どうすれば修正できますか?
スクリプトの場所に相対的なパスを指定できます。ユニットテストを書くときはいつもそうしています。
すべての python ファイルには、__file__
そのファイルへのパスを格納する特別な属性 -- -- があります。
py_file= os.path.abspath(__file__) # path to main.py
py_dir = os.path.dirname(py_file) # path to the parent dir of main.py
txt_file = os.path.join(py_dir, 'info.txt') # path to info.txt
そんなはずです。相対パスは、スクリプトが存在するディレクトリではなく、プロセスの現在の作業ディレクトリに対して相対的です。
ハードコードするのではなく、 を使用してスクリプトのパスを見つけるsys.path[0]
かchdir
、ファイル名で直接使用することができます。
os.path.join(sys.path[0], 'info.txt')