Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中获取路径的左侧部分?_Python_Path - Fatal编程技术网

如何在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

如何在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
使用:

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循环,因为这样我就不需要额外的库。但如果我遇到更多这样的问题,我会转而使用你的解决方案。再次感谢!