我正在为我的脚本编写一个小的命令行实用程序,我不知道如何正确地从参数中获取完整的路径。
我的意思是
parser = ArgumentParser()
parser.add_argument("-src",
required = True, help="path to some folder")
args = parser.parse_args()
print(args.src)
如果用户传递完整路径,例如"/home/username/projectname/folder"
,一切都很好。
但是,如果用户从"projectname"
文件夹运行脚本并传递相对路径"./folder"
,则在解析参数时会得到完全相同的字符串"./folder"
,而不是完整的路径"/home/username/projectname/folder"
。
所以,我一直在想,在Argparse
中是否有某种内置的功能,允许从相对路径中获取完整路径?
3条答案
按热度按时间wkyowqbh1#
要添加到Tryph的答案中,可以在参数声明中指定
type
参数。它可以接受任何接受单个字符串参数并返回转换后值的可调用对象:这将返回一个带有绝对路径的字符串,您也可以指定自己的函数:
iovurdzv2#
EDIT:Alex's answer演示了如何通过填写
add_argument
的type
参数,让argparse
管理相对到绝对路径转换。我不认为argparse提供了这样的功能,但你可以使用os.path.abspath来实现:
请记住,这将通过将工作目录与相对路径连接起来来创建绝对路径。因此,路径被认为是相对于工作目录的。
如果你想让路径相对于脚本目录,你可以在
__file__
变量上使用os.path.dirname,然后使用os.path.join从相对于Python脚本的路径构建一个绝对路径:最后,由于连接路径可以包含
.
和..
等标记,因此可以使用os.path.normpath“美化”构建的路径:5m1hhzi43#
难道我们的朋友
pathlib
不会简化这个问题吗?abs_path
现在是一个pathlib.PosixPath
对象,但是如果需要的话,它很容易转换为字符串。