我的代码需要能够搜索特定文件的目录列表。它需要将别名作为路径名的一部分来处理,并且仍然可以找到文件的实际路径。例如,它需要将$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”?没有它我怎么得到绝对路径
HOME
是一个shell变量,abspath
根本不使用shell,因此参数没有展开。因此,它被视为一个文本字符串,命名当前目录中的子目录。你必须自己扩展它。因为HOME
是一个标准的环境变量,所以可以使用os.getenv
(当然,如果它不是环境变量,那么您根本无法访问它,即使它是在启动Python的shell中定义的。)
这就是你最初尝试失败的原因。实际上,使用^{} as suggested by Michael Butscher
os.path.expandvars(path)
展开路径中的环境变量。展开后,可以创建绝对路径。一起:相关问题 更多 >
编程相关推荐