23

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")します。明らかな移植性の理由から、フルパスでハードコーディングしたくありません。これを実行できる一連のメソッドがOSモジュールにありますか?

4

2 に答える 2

53

に指定するパスopenは、現在の作業ディレクトリ (スクリプトを実行するディレクトリ) からの相対パスにする必要があります。したがって、上記の例は、cgi-bin ディレクトリから実行した場合にのみ機能します。

簡単な解決策は、パスをスクリプトに対して相対的にすることです。考えられる解決策の 1 つ。

from os import path

basepath = path.dirname(__file__)
filepath = path.abspath(path.join(basepath, "..", "..", "fileIwantToOpen.txt"))
f = open(filepath, "r")

このようにして、実行中のスクリプトのパス (basepath) を取得し、それを開きたいファイルの相対パスと結合します。os.path2 つのパスの結合の詳細を処理します。

于 2010-12-07T21:12:21.273 に答える
6

これにより、スクリプトが配置されているディレクトリに移動するはずです (まだそこにいない場合)。

file_path = os.path.dirname(__file__)
if file_path != "":
    os.chdir(file_path)
open("../../fileIwantToOpen.txt","r")
于 2010-12-07T21:16:40.100 に答える