如何在python中解析相对路径?

如何在python中解析相对路径?,python,path,Python,Path,我有这样的目录结构 projectfolder/fold1/fold2/fold3/script.py 现在,我给script.py一个路径作为一个文件的命令行参数,该文件位于 fold1/fold_temp/myfile.txt 所以基本上我希望能够以这种方式给出路径 ../../fold_temp/myfile.txt >>python somepath/pythonfile.py -input ../../fold_temp/myfile.txt 这里的问题是,我可能

我有这样的目录结构

projectfolder/fold1/fold2/fold3/script.py
现在,我给script.py一个路径作为一个文件的命令行参数,该文件位于

fold1/fold_temp/myfile.txt
所以基本上我希望能够以这种方式给出路径

../../fold_temp/myfile.txt 

>>python somepath/pythonfile.py -input ../../fold_temp/myfile.txt
这里的问题是,我可能会得到完整路径或相对路径,所以我应该能够决定,并基于这一点,我应该能够创建绝对路径

我已经了解了与路径相关的函数

参考问题给出了部分答案,但我不知道如何使用其中提供的函数构建完整路径

试试看,它可以做你想做的;)

基本上,它将任何给定路径转换为您可以使用的绝对路径,因此您不需要区分相对路径和绝对路径,只需使用此函数对它们中的任何路径进行规范化

例如:

从os.path导入abspath
filename=abspath(“../../fold_temp/myfile.txt”)
打印(文件名)
它将输出文件的绝对路径

编辑:

如果您使用的是Python3.4或更高版本,您还可以使用的方法。请注意,这将返回路径对象,而不是字符串。如果您需要字符串,仍然可以使用
str()
将其转换为字符串

例如:

从pathlib导入路径
filename=Path('../../fold_temp/myfile.txt').resolve()
打印(文件名)

使用os.path.isbs判断输入路径是绝对的还是相对的,如果是相对的,则使用os.path.join将其转换为绝对的

对于Python3,您可以使用pathlib的功能解析符号链接和
组件

您需要有一个Path对象,但是在str和Path之间进行转换非常简单


我建议任何使用Python3的人放弃
os.path
及其凌乱的长函数名,坚持使用
pathlib
path对象。

一个实用的例子:

sys.argv[0]
提供当前脚本的名称

os.path.dirname()
提供相对目录名

因此,下一行给出了当前执行文件的绝对工作目录

cwd=os.path.abspath(os.path.dirname(sys.argv[0]))


就我个人而言,我总是使用它而不是
os.getcwd()
,因为它给了我脚本的绝对路径,独立于调用脚本的目录。

这不是一个解决方案,因为在目录路径中,您将有一个脚本文件的路径,根据问题,我不想将其作为路径。类似的解决方案在问题中提供的链接中。。。如果您的输入文件位于同一目录或具有相同父目录的某个子目录中,这是完全正确的。如果
path
是绝对路径(在Pyhon 3.6上测试),那么join(dir,path)已经等于
path
。如果用户以正确路径传递,您为什么关心它是绝对路径还是相对路径?Python当然不关心,您的用户也可能不关心。的可能副本提供了一个小示例。。。它比链接好;否则,一个很好的答案将被投票。。。
import os
dir = os.path.dirname(__file__)
path = raw_input()
if os.path.isabs(path):
    print "input path is absolute"
else:
    path = os.path.join(dir, path)
    print "absolute path is %s" % path