Python os模块在当前目录上打开文件,具有相对路径

Mat*_*ips 17 python file-io cgi cgi-bin

OS模块的文档似乎没有关于如何在没有完整路径的情况下打开不在子目录中的文件或脚本运行的当前目录的信息.我的目录结构如下所示.

/home/matt/project/dir1/cgi-bin/script.py
/home/matt/project/fileIwantToOpen.txt

open("../../fileIwantToOpen.txt","r")
Run Code Online (Sandbox Code Playgroud)

给出文件未找到错误.但是如果我在cgi-bin目录中启动一个python解释器并试一试open("../../fileIwantToOpen.txt","r")它.出于明显的可移植性原因,我不想在完整路径中进行硬编码.有一组的OS模块的方法是CAN做到这一点?

ter*_*nus 45

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

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

from os import path

basepath = path.dirname(__file__)
filepath = path.abspath(path.join(basepath, "..", "..", "fileIwantToOpen.txt"))
f = open(filepath, "r")
Run Code Online (Sandbox Code Playgroud)

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


And*_*ark 6

这应该将您移动到脚本所在的目录中,如果您还没有:

file_path = os.path.dirname(__file__)
if file_path != "":
    os.chdir(file_path)
open("../../fileIwantToOpen.txt","r")
Run Code Online (Sandbox Code Playgroud)