gpt4 book ai didi

python - 为什么要同时使用 os.path.abspath 和 os.path.realpath?

转载 作者:IT老高 更新时间:2023-10-28 21:33:08 46 4
gpt4 key购买 nike

在多个开源项目中,我见过有人用os.path.abspath(os.path.realpath(__file__))来获取当前文件的绝对路径。

但是,我发现 os.path.abspath(__file__)os.path.realpath(__file__) 产生相同的结果。 os.path.abspath(os.path.realpath(__file__)) 好像有点多余。

人们使用它有什么原因吗?

最佳答案

对于您所述的场景,没有理由将 realpath 和 abspath 结合起来,因为 os.path.realpath在返回结果之前实际上调用了 os.path.abspath(我检查了 Python 2.5 到 Python 3.6)。

  • os.path.abspath 返回绝对路径,但不解析其参数中的符号链接(symbolic link)。
  • os.path.realpath会先解析路径中的所有符号链接(symbolic link),然后返回绝对路径。

但是,如果您希望路径包含 ~,则 abspath 或 realpath 都不会将 ~ 解析为用户的主目录,并且生成的路径将无效。您需要使用 os.path.expanduser解决这个问题到用户的目录。

为了便于解释,以下是我在 Windows 和 Linux、Python 3.4 和 Python 2.6 中验证的一些结果。当前目录(./)是我的主目录,如下所示:

myhome
|- data (symlink to /mnt/data)
|- subdir (extra directory, for verbose explanation)
# os.path.abspath returns the absolute path, but does NOT resolve symlinks in its argument
os.path.abspath('./')
'/home/myhome'
os.path.abspath('./subdir/../data')
'/home/myhome/data'


# os.path.realpath will resolve symlinks AND return an absolute path from a relative path
os.path.realpath('./')
'/home/myhome'
os.path.realpath('./subdir/../')
'/home/myhome'
os.path.realpath('./subdir/../data')
'/mnt/data'

# NEITHER abspath or realpath will resolve or remove ~.
os.path.abspath('~/data')
'/home/myhome/~/data'

os.path.realpath('~/data')
'/home/myhome/~/data'

# And the returned path will be invalid
os.path.exists(os.path.abspath('~/data'))
False
os.path.exists(os.path.realpath('~/data'))
False

# Use realpath + expanduser to resolve ~
os.path.realpath(os.path.expanduser('~/subdir/../data'))
'/mnt/data'

关于python - 为什么要同时使用 os.path.abspath 和 os.path.realpath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37863476/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com