在python中,假设我有一个这样的路径:

/folderA/folderB/folderC/folderD/

我怎样才能得到folderD部分?


当前回答

path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()

其他回答

path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()

以下是我的方法:

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

使用os.path。Normpath,然后os.path.basename:

>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'

第一个函数去掉任何尾随的斜杠,第二个函数给出路径的最后一部分。仅使用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'

我喜欢Path的部分方法:

grandparent_directory, parent_directory, filename = Path(export_filename).parts[-3:]
log.info(f'{t: <30}: {num_rows: >7} Rows exported to {grandparent_directory}/{parent_directory}/{filename}')