Answers:
使用os.path.normpath
,然后os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
第一个去除所有尾部的斜杠,第二个给您路径的最后一部分。使用only basename
会给出最后一个斜杠(在本例中为)之后的所有内容''
。
你可以做
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1:如果您将其赋予/folderA/folderB/folderC/folderD/xx.py,则此方法有效。这给出了xx.py作为基本名称。我猜这不是您想要的。所以你可以这样做-
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
UPDATE2:正如lars指出的那样,进行更改以适应尾随的'/'。
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
使用python 3,您可以使用pathlib
模块(pathlib.PurePath
例如):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
如果您想要文件所在的最后一个文件夹名称:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
这是我的方法:
>>> import os
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/test.py'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD'))
folderC
一个幼稚的解决方案(Python 2.5.2+):
s="/path/to/any/folder/orfile"
desired_dir_or_file = s[s.rindex('/',0,-1)+1:-1] if s.endswith('/') else s[s.rindex('/')+1:]
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
os.path
模块。
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
。不是folderC
os.path
模块。
rstrip('/')
会更简单,但后来很快意识到我必须使用rstrip(os.path.sep)
,因此显然使用normpath
是合理的。