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")它可以工作。出于明显的可移植性原因,我不想在完整路径中硬编码。操作系统模块中是否有一组方法可以做到这一点?

4

2 回答 2

53

给定的路径open应该相对于当前工作目录,即您运行脚本的目录。所以上面的例子只有在你从 cgi-bin 目录运行时才有效。

一个简单的解决方案是使您的路径相对于脚本。一种可能的解决方案。

from os import path

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

这样,您将获得正在运行的脚本的路径(基本路径)并将其与要打开的文件的相对路径连接起来。os.path将处理加入两条路径的细节。

于 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 回答