在类 Unix 系统和 Windows 中,~
和 ~user
是常用的主目录缩写符号。在 Shell 中,这些符号会被自动展开:
cd ~/Downloads
但在 Python 中,os.path.abspath
函数并不会展开 ~
,而是将其当作普通的目录名:
In [2]: os.path.abspath('~')
Out[2]: '/Users/chi/Projects/~'
为了正确解析主目录路径,应该使用 os.path.expanduser
函数:
In [3]: os.path.expanduser('~')
Out[3]: '/Users/chi'
In [4]: os.path.expanduser('~/Downloads')
Out[4]: '/Users/chi/Downloads'
该函数同样支持 ~user
格式,可以获取指定用户的主目录:
In [5]: os.path.expanduser('~root')
Out[5]: '/root'
如果你使用 Python 3.4+ 的 pathlib
模块,也可以通过 Path.expanduser()
方法实现相同功能:
from pathlib import Path
path = Path('~/Downloads').expanduser()
# 或直接获取主目录
home = Path.home()