OSモジュールのドキュメントには、フルパスなしでスクリプトが実行されているサブディレクトリまたは現在のディレクトリにないファイルを開く方法に関する情報がないようです。私のディレクトリ構造は次のようになります。
_/home/matt/project/dir1/cgi-bin/script.py
/home/matt/project/fileIwantToOpen.txt
open("../../fileIwantToOpen.txt","r")
_
ファイルが見つからないというエラーが発生します。しかし、私がcgi-binディレクトリでpythonインタープリターを起動してopen("../../fileIwantToOpen.txt","r")
を試してみると、それは機能します。明らかな移植性のためにフルパスにハードコードしたくない[〜#〜] can [〜#〜]を実行する一連のメソッドがOSモジュールにありますか?
open
に指定するパスは、現在の作業ディレクトリ(スクリプトを実行するディレクトリ)からの相対パスである必要があります。したがって、上記の例は、cgi-binディレクトリから実行した場合にのみ機能します。
簡単な解決策は、スクリプトに相対的なパスを作成することです。 1つの可能な解決策。
from os import path
basepath = path.dirname(__file__)
filepath = path.abspath(path.join(basepath, "..", "..", "fileIwantToOpen.txt"))
f = open(filepath, "r")
このようにして、実行中のスクリプトのパス(ベースパス)を取得し、それを開きたいファイルの相対パスと結合します。 os.path
は、2つのパスを結合する詳細を処理します。
これにより、スクリプトが配置されているディレクトリに移動します(まだそこにいない場合)。
file_path = os.path.dirname(__file__)
if file_path != "":
os.chdir(file_path)
open("../../fileIwantToOpen.txt","r")