我想知道什么是pythonic函数:
我想删除wa路径前的所有内容.
p = path.split('/')
counter = 0
while True:
if p[counter] == 'wa':
break
counter += 1
path = '/'+'/'.join(p[counter:])
Run Code Online (Sandbox Code Playgroud)
例如,我想'/book/html/wa/foo/bar/'成为'/wa/foo/bar/'.
我的问题是找到给定文件集的公共路径前缀.
从字面上看,我期待"os.path.commonprefix"可以做到这一点.不幸的是,commonprefix位于其中的事实path相当具有误导性,因为它实际上将搜索字符串前缀.
对我来说问题是,如何才能真正解决路径?在这个(相当高的评级)答案中简要提到了这个问题,但仅作为附注并且提议的解决方案(对commonprefix的输入附加斜线)imho存在问题,因为它将失败例如:
os.path.commonprefix(['/usr/var1/log/', '/usr/var2/log/'])
# returns /usr/var but it should be /usr
Run Code Online (Sandbox Code Playgroud)
为了防止其他人陷入同一个陷阱,可能值得在一个单独的问题中讨论这个问题:是否有一个简单/可移植的解决方案,不依赖于对文件系统的讨厌检查(即访问结果) commonprefix并检查它是否是一个目录,如果没有返回os.path.dirname结果)?
python库pathlib提供Path.relative_to.如果一个路径是另一个路径的子路径,此函数可以正常工作,如下所示:
In [12]: from pathlib import Path
In [13]: foo = Path("C:\\foo")
In [14]: bar = Path("C:\\foo\\bar")
In [15]: bar.relative_to(foo)
Out[15]: WindowsPath('bar')
Run Code Online (Sandbox Code Playgroud)
但是,如果两个路径在同一级别上,relative_to则不起作用.
In [16]: baz = Path("C:\\baz")
In [17]: foo.relative_to(baz)
--------------------------------------------------------------------------
ValueError: 'C:\\foo' does not start with 'C:\\baz'
Run Code Online (Sandbox Code Playgroud)
我希望结果如此
WindowsPath("..\\baz")
Run Code Online (Sandbox Code Playgroud)
该函数os.path.relpath正确执行此操作:
In [18]: import os
In [19]: foo = "C:\\foo"
In [20]: bar = "C:\\bar"
In [21]: os.path.relpath(foo, bar)
Out[21]: '..\\foo'
Run Code Online (Sandbox Code Playgroud)
有没有办法实现的功能os.path.relpath使用pathlib.Path?
我想在我的系统上找到两个目录之间的相对路径。
例子:
如果我有pathA == <pathA>和pathB == <pathA>/dir1/dir2,它们之间的相对路径将是dir1/dir2.
我怎么能在python中找到它?有我可以使用的工具吗?
如果pathB包含在pathA 中,我可以做得到pathB.replace(pathA, '')这个相对路径,但是如果pathB不包含在pathA 中怎么办?