如何解析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中的相对路径?的主要内容,如果未能解决你的问题,请参考以下文章

将相对 url 路径解析为其绝对路径

从 Python 中的相对路径导入

打字稿无法解析导入中的非相对路径

Python 导入相对路径

使用 Webpack 解析从 node_modules 到 Dist 文件夹的相对路径

Python中的绝对路径和相对路径