在类 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()

参考链接