如何解析python中的相对路径?
Posted
技术标签:
【中文标题】如何解析python中的相对路径?【英文标题】:How to resolve relative paths in python? 【发布时间】:2015-12-26 15:01:24 【问题描述】:我有这样的目录结构
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
参考问题给出了部分答案,但我不知道如何使用其中提供的功能构建完整路径。
【问题讨论】:
如果用户传入了正确的路径,你为什么要关心它是绝对的还是相对的? Python 肯定不在乎,您的用户也可能不在乎。 How to get an absolute file path in Python的可能重复 【参考方案1】:试试os.path.abspath,它应该做你想做的;)
基本上,它将任何给定路径转换为您可以使用的绝对路径,因此您无需区分相对路径和绝对路径,只需使用此函数对它们中的任何一个进行规范化。
例子:
from os.path import abspath
filename = abspath('../../fold_temp/myfile.txt')
print(filename)
它将输出文件的绝对路径。
编辑:
如果您使用的是 Python 3.4 或更高版本,您还可以使用 pathlib.Path 的 resolve() 方法。请注意,这将返回一个 Path 对象而不是字符串。如果您需要字符串,您仍然可以使用str()
将其转换为字符串。
例子:
from pathlib import Path
filename = Path('../../fold_temp/myfile.txt').resolve()
print(filename)
【讨论】:
提供一个小例子……比链接好;否则,一个很好的答案,会被投票赞成......【参考方案2】: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转换为绝对路径
【讨论】:
这不能作为解决方案,因为在 dir 路径中,您将拥有脚本文件的路径,根据问题,我不想将其作为路径.. 在相关链接中提供了更相似的解决方案......如果您的输入文件位于同一目录或某些具有相同父级的子目录中,则完全没问题os.path.join(dir, path)
已经等于 path
,如果 path
是绝对的(在 Pyhon 3.6 上测试)。
我面临另一种情况,这个方法对我有用,谢谢【参考方案3】:
对于 Python3,您可以使用 pathlib 的 resolve 功能来解析符号链接和 ..
组件。
您需要有一个 Path 对象,但是在 str 和 Path 之间进行转换非常简单。
我建议任何使用 Python3 的人放弃 os.path
及其凌乱的长函数名称并坚持使用 pathlib
路径对象。
【讨论】:
一些例子会很有用。【参考方案4】:一个实际的例子:
sys.argv[0]
为您提供当前脚本的名称
os.path.dirname()
为您提供相对目录名称
因此,下一行为您提供当前执行文件的绝对工作目录。
cwd = os.path.abspath(os.path.dirname(sys.argv[0]))
就我个人而言,我总是使用它而不是 os.getcwd()
,因为它为我提供了脚本绝对路径,与调用脚本的目录无关。
【讨论】:
以上是关于如何解析python中的相对路径?的主要内容,如果未能解决你的问题,请参考以下文章