如何在python中获得路径的左侧部分?

时间:2014-10-12 18:45:06

标签: python path

如何在python中获取相对路径的最左侧部分?

我从这样的事情开始:

/var/tmp/workdir/1/foo/bar/test.jpg

然后我删除了一些以获得:

1/foo/bar/test.jpg

使用:

rel_path = os.path.relpath(path,base_dir)

现在我怎样才能得到最左边的部分 - “1”?

我只能找到从右侧开始的工具,但在这种情况下,我想要最左边的东西,因为它是具有用户ID的通讯员。另外我想避免从右侧出发,因为可能有更多的子目录。

3 个答案:

答案 0 :(得分:4)

如果名称包含str.split(当然是转义),则使用os.path.sep可能会给出错误的结果。最安全的解决方案是:

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

答案 1 :(得分:1)

poke提到了Python 3.4中内置的pathlib库。您还可以通过运行pip install pathlib在Python 2.6或2.7上使用pathlib,如下所述:http://pathlib.readthedocs.org/en/pep428

您的代码如下所示:

>>> 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')

答案 2 :(得分:0)

如果您使用Python 3.4,则可以使用新的pathlib

否则,您可以使用普通的字符串操作来获取该部分,例如使用str.partition

>>> path = '1/foo/bar/test.jpg'
>>> path.partition('/')
('1', '/', 'foo/bar/test.jpg')

如果要在操作系统的路径分隔符上拆分,也可以使用os.sep而不是'/'