为什么os.path.abspath会在扩展别名时添加别名?

2024-10-01 22:43:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码需要能够搜索特定文件的目录列表。它需要将别名作为路径名的一部分来处理,并且仍然可以找到文件的实际路径。例如,它需要将$HOME/test.dat之类的内容转换为/home/greenmatt/test.dat。因此,我尝试使用os.path.abspath

不幸的是,返回结果时,别名粘在实际目录名的末尾。下面展示了我所看到的

从命令行:

> echo $HOME
/home/greenmatt

然后在Python中:

> python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print(os.path.abspath('$HOME'))
/home/greenmatt/$HOME

os.path.realpath做同样的事情:

>>> print(os.path.realpath('$HOME'))
/home/greenmatt/$HOME

为什么路径中会添加额外的“$HOME”?没有它我怎么得到绝对路径


Tags: 文件path代码test路径目录home列表
2条回答

HOME是一个shell变量,abspath根本不使用shell,因此参数没有展开。因此,它被视为一个文本字符串,命名当前目录中的子目录。你必须自己扩展它。因为HOME是一个标准的环境变量,所以可以使用os.getenv

> os.path.abspath(os.getenv('HOME'))  # $ must be omitted
/home/greenmatt

(当然,如果它不是环境变量,那么您根本无法访问它,即使它是在启动Python的shell中定义的。)


这就是你最初尝试失败的原因。实际上,使用^{} as suggested by Michael Butscher

os.path.expandvars(path)展开路径中的环境变量。展开后,可以创建绝对路径。一起:

os.path.abspath(os.path.expandvars(path))

相关问题 更多 >

    热门问题