如何在Python中查找两个目录?
问题描述:
我知道,去到一个父目录,你应该使用如何在Python中查找两个目录?
parentname = os.path.abspath(os.path.join(yourpath, os.path.pardir))
但是,如果我想获得一个目录的名称是什么几个文件夹呢?
说我给了/ stuff/home/blah/pictures/myaccount/album,我想获取最后两个文件夹“myaccount”和“album”的名称(不是路径,只是名称)在我的脚本中使用。我怎么做?
答
>>> 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'
等等
答
有不看是什么特别优雅,但这个应该做的伎俩:
>>> 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
会返回一个空字符串第二组分尾随斜线,因此如果不另外验证所提供路径的格式,则可能需要确保先将其去掉。
答
将路径拆分成list并获取最后两个元素如何?
>>> 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']
这不是法律,但奇怪的是格式化的路径,面对强大的特别,像用'.'或''//作为路径元素。 –
感谢您的评论,我只是使用问题中给出的路径字符串。我认为对于真实环境,可以使用'os.path.abspath()'来预处理路径字符串。 – hzm
是的,这可能比在我的答案中使用'normpath'更强大 - 将更新它.. :-) –