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模块中是否有一组 CAN 执行此操作的方法?
答案 0 :(得分:42)
open
的路径应该相对于当前工作目录,即运行脚本的目录。因此,只有从cgi-bin目录运行它时,上述示例才有效。
一个简单的解决方案是使您的路径相对于脚本。一种可能的解决方案。
from os import path
basepath = path.dirname(__file__)
filepath = path.abspath(path.join(basepath, "..", "..", "fileIwantToOpen.txt"))
f = open(filepath, "r")
这样您就可以获得正在运行的脚本的路径(basepath),并将其与您要打开的文件的相对路径连接起来。 os.path
将负责加入这两条路径的细节。
答案 1 :(得分:4)
如果你不在那里,这会把你带到脚本所在的目录:
file_path = os.path.dirname(__file__)
if file_path != "":
os.chdir(file_path)
open("../../fileIwantToOpen.txt","r")