Python os.path.relpath行为

jve*_*dge 9 python path os.path

我有一个目录bar的目录里面foo,使用文件foo_file.txt目录foo和文件bar_file.txt目录bar; 即

computer$ ls
foo/
computer$ ls foo/
bar/  foo_file.txt
computer$ ls foo/bar/
bar_file.txt
Run Code Online (Sandbox Code Playgroud)

使用python os.path.relpath函数,我期望:

os.path.relpath('foo/bar/bar_file.txt', 'foo/foo_file.txt')
Run Code Online (Sandbox Code Playgroud)

给我:

'bar/bar_file.txt'
Run Code Online (Sandbox Code Playgroud)

但是,它实际上给了我:

'../bar/bar_file.txt'
Run Code Online (Sandbox Code Playgroud)

为什么是这样?有没有一种简单的方法来获得我想要的行为?

编辑:这是在Linux上使用Python 2.7.3

小智 9

os.path.relpath(arg1, arg2) 
Run Code Online (Sandbox Code Playgroud)

将给出arg1目录中arg2的相对路径。为了从arg2到arg1,您需要先建立一个目录(..),进入bar目录(bar),然后进入bar_file.txt。因此,相对路径为

../bar/bar_file.txt
Run Code Online (Sandbox Code Playgroud)

  • os.path.relpath(arg1,arg2)将从arg2目录中给出arg1的相对路径 (7认同)

Ign*_*ams 8

os.path.relpath() 假设它的参数是目录.

>>> os.path.join(os.path.relpath(os.path.dirname('foo/bar/bar_file.txt'),
        os.path.dirname('foo/foo_file.txt')),
        os.path.basename('foo/bar/bar_file.txt'))
'bar/bar_file.txt'
Run Code Online (Sandbox Code Playgroud)