Python relpath / home / <username> vs.~

时间:2015-08-23 17:01:29

标签: python

在Python3.4(以及2.6)中,使用os.path.relpath cmd,如果我运行,我会得到不同的答案:
os.path.relpath("~/foo/bar.txt", "~")
比如果我跑 os.path.relpath("~/foo/bar.txt", "/home/<username>/")
(当然,我用我的用户名替换<username>!)

即如果我在我的主目录中,在第一种情况下,我得到了     foo/bar.txt
(正如我所料),但在第二种情况下,我得到了     ~/foo/bar.txt
这不是我所期望的,因为〜正是/home/<username>。 (无论我是否在第二个arg中包含尾部'/',我在第二种情况下得到相同的结果。)

如果我在我的主目录的子目录中运行它,第二种情况会产生更奇怪的结果,比如〜/ Data /:
    Data/~/foo/bar.txt
除非我弄错了,否则这是一个不存在的目录。

我可以找到解决方法,但是为什么会这样发生的原因是什么?我不认为这是一个错误,因为它已经存在了很长时间。

1 个答案:

答案 0 :(得分:2)

type=date实际上并不总是你的主目录 - 这只是你的shell的解释。您可以在任何地方创建名为~的目录,就像创建名为~的目录一样。由于orange可能是一个普通的旧目录名,因此Python正在以这种方式对待它。

如果您希望Python将~解释为主目录,就像shell一样,您需要告诉Python您要使用{{~替换主目录的路径~ 3}}在将目录名称传递给relpath之前。