답변:
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')
업데이트 1 : 이 방법은 /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'
파이썬 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
파일이있는 마지막 폴더 이름을 얻는 솔루션을 찾고 있었고 방금 split
두 번 사용 하여 올바른 부분을 얻었습니다. 그것은 질문이 아니지만 Google이 나를 여기로 옮겼습니다.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
순진한 솔루션 (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:]
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
. 아닙니다folderC
os.path
모듈을 사용하십시오 .
rstrip('/')
더 간단 하다고 생각 했지만 곧 사용해야한다는 것을 빨리 깨달았rstrip(os.path.sep)
으므로 분명히 사용normpath
이 정당화되었습니다.