如何只获取Python中路径的最后一部分?

pep*_*ero 203 python path path-manipulation

在Python中,假设我有这样的路径:

/folderA/folderB/folderC/folderD/
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个folderD部分?

Fre*_*Foo 344

使用os.path.normpath,然后os.path.basename:

>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Run Code Online (Sandbox Code Playgroud)

第一个剥离任何尾部斜杠,第二个为您提供路径的最后一部分.使用仅basename提供最后一个斜杠之后的所有内容,在本例中为''.

  • 我最初认为 `rstrip('/')` 会更简单,但很快意识到我必须使用 `rstrip(os.path.sep)`,所以显然使用 `normpath` 是合理的。 (2认同)
  • @jinnlao的[答案](/sf/answers/3840811131/)现在好多了。 (2认同)

Sri*_*aju 22

你可以做到

>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

UPDATE2:正如lars指出的那样,进行更改以容纳尾随'/'.

>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Run Code Online (Sandbox Code Playgroud)


Mik*_*rer 16

这是我的方法:

>>> 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
Run Code Online (Sandbox Code Playgroud)


jin*_*lao 11

使用python 3,您可以使用pathlib模块(pathlib.PurePath例如):

>>> import pathlib

>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
Run Code Online (Sandbox Code Playgroud)

如果您想要文件所在的最后一个文件夹名称:

>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
Run Code Online (Sandbox Code Playgroud)

  • 好吧,只是指出 `PurePath` 与 `Path`,第一个提供“纯计算操作”(无 I/O),而另一个(“具体路径”)继承自第一个,但也提供 I/O 操作。 (2认同)

CB *_*sen 9

如果您使用本机 python 包pathlib,这非常简单。

>>> from pathlib import Path
>>> your_path = Path("/folderA/folderB/folderC/folderD/")
>>> your_path.stem
'folderD'
Run Code Online (Sandbox Code Playgroud)

假设您有folderD 中某个文件的路径。

>>> from pathlib import Path
>>> your_path = Path("/folderA/folderB/folderC/folderD/file.txt")
>>> your_path.name
'file.txt'
>>> your_path.parent.name
'folderD'
Run Code Online (Sandbox Code Playgroud)


use*_*754 8

我正在寻找一个解决方案,以获取文件所在的最后一个文件名,我只使用拆分两次,以获得正确的部分.这不是问题,但谷歌在这里转移了我.

pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + "   "  + tail)
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用 `os.path.basename(os.path.dirname(pathname))` 在您的示例中给出 `folderD` 。查看@Mike Miterer 的回答 (2认同)

And*_*man 7

我喜欢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}')
Run Code Online (Sandbox Code Playgroud)