如何解决python中的相对路径?

时间:2015-09-29 08:01:05

标签: 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

这里的问题是我可能会获得完整路径或相对路径,所以我应该能够决定并基于此我应该能够创建绝对路径。

我已经掌握了与路径相关的功能。

Question 1

Question 2

参考问题正在给出部分答案,但我不知道如何使用其中提供的功能构建完整路径。

4 个答案:

答案 0 :(得分:27)

尝试os.path.abspath,它应该做你想要的;)

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

示例:

from os.path import abspath
filename = abspath('../../fold_temp/myfile.txt')
print(filename)

它将输出文件的绝对路径。

修改

如果您使用的是Python 3.4或更高版本,则还可以使用resolve()pathlib.Path方法。请注意,这将返回Path对象而不是字符串。如果您需要一个字符串,您仍然可以使用str()将其转换为字符串。

示例:

from pathlib import Path
filename = Path('../../fold_temp/myfile.txt').resolve()
print(filename)

答案 1 :(得分:2)

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

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

我建议任何使用Python3的人都删除os.path及其凌乱的长函数名称,并坚持使用pathlib Path对象。

答案 2 :(得分:0)

一个实际示例:

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

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

因此,下一行将为您提供当前执行文件的绝对工作目录。

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

我个人总是使用它而不是os.getcwd(),因为它为我提供了脚本的绝对路径,而与调用脚本的目录无关。

答案 3 :(得分:-3)

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

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