如何在python中获取路径的左侧部分?
如何在python中获取相对路径的最左边部分 我是这样开始的:如何在python中获取路径的左侧部分?,python,path,Python,Path,如何在python中获取相对路径的最左边部分 我是这样开始的: /var/tmp/workdir/1/foo/bar/test.jpg >>> from pathlib import PurePath >>> p = PurePath('1/foo/bar/test.jpg') >>> p.parts ('1', 'foo', 'bar', 'test.jpg') 然后我移除了其中的一些,以获得: 1/foo/bar/test.jpg
/var/tmp/workdir/1/foo/bar/test.jpg
>>> from pathlib import PurePath
>>> p = PurePath('1/foo/bar/test.jpg')
>>> p.parts
('1', 'foo', 'bar', 'test.jpg')
然后我移除了其中的一些,以获得:
1/foo/bar/test.jpg
使用:
rel_path = os.path.relpath(path,base_dir)
现在我怎样才能得到最左边的部分“1”
我只能找到右边的工具,但在这种情况下,我想要最左边的工具,因为它对应一个用户ID。我还想避免从右边开始,因为可能会有更多的子目录。如果使用Python 3.4,可以使用新的 否则,您可以使用普通字符串操作来获取该部分,例如:
如果要在操作系统的路径分隔符上拆分,也可以使用而不是
'/'
。如果名称包含os.path.sep
,则使用str.split
可能会给出不正确的结果(当然是转义的)。imho最安全的解决方案是:
basename = None # guards against UnboundLocalError in case of empty rel_path
while rel_path:
rel_path, basename = os.path.split(rel_path)
print basename # this will be the leftmost component
poke提到了Python 3.4中内置的pathlib库。您还可以通过运行
pip install pathlib
,在Python 2.6或2.7上使用pathlib,如下所述:
您的代码如下所示:
/var/tmp/workdir/1/foo/bar/test.jpg
>>> from pathlib import PurePath
>>> p = PurePath('1/foo/bar/test.jpg')
>>> p.parts
('1', 'foo', 'bar', 'test.jpg')
并使用p.parts[0]
获取所需的零件
事实上,您可以使用pathlib完成整个过程,如下所示:
>>> from pathlib import PurePath
>>> p = PurePath('/var/tmp/workdir/1/foo/bar/test.jpg')
>>> p = p.relative_to('/var/tmp/workdir')
>>> p.parts
('1', 'foo', 'bar', 'test.jpg')
您可以使用正则表达式,或者如果id始终位于同一位置,则可以按“/”拆分并获取所需的元素。我知道我最不想做的事情就是使用拆分命令手动获取第一部分。但是为什么没有命令只获取第一部分呢?我想你的方法可以,但这是对cpu的浪费,不是吗?我认为你不应该担心cpu:
100000个循环,每个循环最好3:4.39µs
。除非您希望每秒解析数千条路径,否则每一条路径都有数百个组件…谢谢。我也会考虑这个问题。但我认为现在我将使用while循环,因为这样我就不需要额外的库。但如果我遇到更多这样的问题,我会转而使用你的解决方案。再次感谢!