在python中,假设我有一个这样的路径:
/folderA/folderB/folderC/folderD/
我怎样才能得到folderD部分?
在python中,假设我有一个这样的路径:
/folderA/folderB/folderC/folderD/
我怎样才能得到folderD部分?
当前回答
在python3中,你可以使用pathlib模块(pathlib. python)。例如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'
其他回答
我正在寻找一个解决方案,以获得文件所在的最后一个文件夹名,我只是使用分裂两次,以获得正确的部分。这不是问题,但谷歌把我调到了这里。
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
使用os.path。Normpath,然后os.path.basename:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
第一个函数去掉任何尾随的斜杠,第二个函数给出路径的最后一部分。仅使用basename给出最后一个斜杠之后的所有内容,在本例中斜杠为“。
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
在我目前的项目中,我经常将路径的后面部分传递给函数,因此使用path模块。为了得到第n部分的倒序,我使用:
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"
此外,为了以包含剩余路径的路径的相反顺序传递第n部分,我使用:
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"
注意,这个函数返回一个可以很容易地转换为字符串的Pathobject(例如str(path))
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()