如何在python中获取相对路径的最左侧部分?
我从这样的事情开始:
/var/tmp/workdir/1/foo/bar/test.jpg
然后我删除了一些以获得:
1/foo/bar/test.jpg
使用:
rel_path = os.path.relpath(path,base_dir)
现在我怎样才能得到最左边的部分 - “1”?
我只能找到从右侧开始的工具,但在这种情况下,我想要最左边的东西,因为它是具有用户ID的通讯员。另外我想避免从右侧出发,因为可能有更多的子目录。
答案 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
而不是'/'
。