我有这样的目录结构
projectfolder/fold1/fold2/fold3/script.py
Run Code Online (Sandbox Code Playgroud)
现在我给script.py一个路径作为文件的命令行参数
fold1/fold_temp/myfile.txt
Run Code Online (Sandbox Code Playgroud)
所以基本上我希望能够以这种方式提供路径
../../fold_temp/myfile.txt
>>python somepath/pythonfile.py -input ../../fold_temp/myfile.txt
Run Code Online (Sandbox Code Playgroud)
这里的问题是我可能会获得完整路径或相对路径,因此我应该能够决定并基于此我应该能够创建绝对路径.
我已经掌握了与路径相关的功能.
参考问题给出了部分答案,但我不知道如何使用其中提供的功能构建完整路径.
Sal*_*alo 32
尝试 os.path.abspath,它应该做你想要的;)
基本上它将任何给定路径转换为您可以使用的绝对路径,因此您不需要区分相对路径和绝对路径,只需使用此函数对其中的任何路径进行规范化.
例:
from os.path import abspath
filename = abspath('../../fold_temp/myfile.txt')
print(filename)
Run Code Online (Sandbox Code Playgroud)
它将输出文件的绝对路径.
编辑:
如果您使用的是Python 3.4或更高版本,则还可以使用pathlib.Path的resolve()方法.请注意,这将返回Path对象而不是字符串.如果您需要一个字符串,您仍然可以使用它将其转换为字符串.str()
例:
from pathlib import Path
filename = Path('../../fold_temp/myfile.txt').resolve()
print(filename)
Run Code Online (Sandbox Code Playgroud)
一个实际的例子:
sys.argv[0]给出当前脚本的名称
os.path.dirname()为您提供相对目录名称
因此,下一行给出了当前执行文件的绝对工作目录。
cwd = os.path.abspath(os.path.dirname(sys.argv[0]))
就我个人而言,我总是使用它而不是os.getcwd()因为它为我提供了脚本绝对路径,与调用脚本的目录无关。
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
Run Code Online (Sandbox Code Playgroud)
使用os.path.isabs判断输入路径是绝对路径还是相对路径,如果是相对路径,则使用os.path.join将其转换为绝对路径