如何在Python中查找两个目录?

3 投票
3 回答
1831 浏览
提问于 2025-04-17 06:48

我知道要上到上一级目录,你应该使用

parentname = os.path.abspath(os.path.join(yourpath, os.path.pardir))

但是如果我想获取上面几个文件夹的名字呢?

比如说,我有一个路径是 /stuff/home/blah/pictures/myaccount/album,我想获取最后两个文件夹的名字“myaccount”和“album”(只要名字,不要路径),我该怎么做呢?

3 个回答

2

看起来没有什么特别优雅的解决方案,但这个方法应该可以解决问题:

>>> yourpath = "/stuff/home/blah/pictures/myaccount/album"
>>> import os.path
>>> yourpath = os.path.abspath(yourpath)
>>> (npath, d1) = os.path.split(yourpath)
>>> (npath, d2) = os.path.split(npath)
>>> print d1
album
>>> print d2
myaccount

请记住,如果你提供的路径最后有一个斜杠,使用 os.path.split 的时候,第二部分会返回一个空字符串。所以如果你不检查路径的格式,最好先把这个斜杠去掉。

2

那我们可以把路径拆分成一个列表,然后取最后两个元素吗?

>>> import os
>>> path_str = ' /stuff/home/blah/pictures/myaccount/album'
>>> path_str.split(os.sep)
[' ', 'stuff', 'home', 'blah', 'pictures', 'myaccount', 'album']

对于像 ... 这样的相对路径,可以使用 os.path.abspath() 来提前处理这个路径字符串。

>>> import os
>>> path_str = os.path.abspath('.')
>>> path_str.split(os.sep)
['', 'tmp', 'foo', 'bar', 'foobar']
3
>>> p='/stuff/home/blah/pictures/myaccount/album'
>>> os.path.abspath(p).split(os.sep)[-1]
'album'
>>> os.path.abspath(p).split(os.sep)[-2]
'myaccount'
>>> os.path.abspath(p).split(os.sep)[-3]
'pictures'
>>> os.path.abspath(p).split(os.sep)[-4]
'blah'

等等...

撰写回答