How to get only the last part of a path in Python?

后端 未结 9 521
长发绾君心
长发绾君心 2020-11-28 19:01

In Python, suppose I have a path like this:

/folderA/folderB/folderC/folderD/

How can I get just the folderD part?

相关标签:
9条回答
  • 2020-11-28 19:16
    str = "/folderA/folderB/folderC/folderD/"
    print str.split("/")[-2]
    
    0 讨论(0)
  • 2020-11-28 19:18
    path = "/folderA/folderB/folderC/folderD/"
    last = path.split('/').pop()
    
    0 讨论(0)
  • 2020-11-28 19:22

    You could do

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

    UPDATE1: This approach works in case you give it /folderA/folderB/folderC/folderD/xx.py. This gives xx.py as the basename. Which is not what you want I guess. So you could do this -

    >>> import os
    >>> path = "/folderA/folderB/folderC/folderD"
    >>> if os.path.isdir(path):
            dirname = os.path.basename(path)
    

    UPDATE2: As lars pointed out, making changes so as to accomodate trailing '/'.

    >>> from os.path import normpath, basename
    >>> basename(normpath('/folderA/folderB/folderC/folderD/'))
    'folderD'
    
    0 讨论(0)
  • 2020-11-28 19:23

    Here is my approach:

    >>> 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
    
    0 讨论(0)
  • 2020-11-28 19:30

    With python 3 you can use the pathlib module (pathlib.PurePath for example):

    >>> import pathlib
    
    >>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
    >>> path.name
    'folderD'
    

    If you want the last folder name where a file is located:

    >>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
    >>> path.parent.name
    'folderD'
    
    0 讨论(0)
  • 2020-11-28 19:36

    During my current projects, I'm often passing rear parts of a path to a function and therefore use the Path module. To get the n-th part in reverse order, I'm using:

    from typing import Union
    from pathlib import Path
    
    def get_single_subpath_part(base_dir: Union[Path, str], n:int) -> str:
        if n ==0:
            return Path(base_dir).name
        for _ in range(n):
            base_dir = Path(base_dir).parent
        return getattr(base_dir, "name")
    
    path= "/folderA/folderB/folderC/folderD/"
    
    # for getting the last part:
    print(get_single_subpath_part(path, 0))
    # yields "folderD"
    
    # for the second last
    print(get_single_subpath_part(path, 1))
    #yields "folderC"
    

    Furthermore, to pass the n-th part in reverse order of a path containing the remaining path, I use:

    from typing import Union
    from pathlib import Path
    
    def get_n_last_subparts_path(base_dir: Union[Path, str], n:int) -> Path:
        return Path(*Path(base_dir).parts[-n-1:])
    
    path= "/folderA/folderB/folderC/folderD/"
    
    # for getting the last part:
    print(get_n_last_subparts_path(path, 0))
    # yields a `Path` object of "folderD"
    
    # for second last and last part together 
    print(get_n_last_subparts_path(path, 1))
    # yields a `Path` object of "folderc/folderD"
    

    Note that this function returns a Pathobject which can easily be converted to a string (e.g. str(path))

    0 讨论(0)
提交回复
热议问题