경로가 주어지면 포함된 폴더 이름만 추출하려면 어떻게 해야 합니까?
파이썬에서 작업 중인 파일이 들어 있는 폴더의 이름을 얻으려면 어떤 명령을 사용해야 합니까?
"C:\folder1\folder2\filename.xml"
여기서"folder2"
제가 원하는 것입니다.
내가 생각해낸 유일한 것은os.path.split
두 번:
folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]
더 좋은 방법이 없을까요?
다음을 사용할 수 있습니다.
os.path.dirname(path)
경로 이름 경로의 디렉터리 이름을 반환합니다.이것은 함수 분할()에 대한 경로를 통해 반환되는 쌍의 첫 번째 요소입니다.
전체 경로가 주어지면 경로의 마지막 부분을 얻기 위해 정상적으로 분할할 수 있습니다.예를 들어 다음을 사용합니다.
os.path.basename(path)
경로 이름 경로의 기본 이름을 반환합니다.이것은 함수 분할()에 대한 경로를 통해 반환되는 쌍의 두 번째 요소입니다.이 함수의 결과는 유닉스 기본 이름 프로그램과 다릅니다. 여기서 '/foo/bar/'의 기본 이름은 'bar'를 반환하고, basename() 함수는 빈 문자열(')을 반환합니다.
모두 함께:
>>> import os
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml")
>>> path
'C:/folder1/folder2'
>>> os.path.basename(path)
'folder2'
dirname을(를) 사용하려고 합니다.디렉터리 하나만 원하는 경우 os.path.basename을 사용할 수 있습니다.
모두 합치면 다음과 같습니다.
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
그러면 "other_sub_dir"가 나옵니다.
다음은 이상적인 접근법은 아니지만, 제가 원래 os.path.split을 사용하여 제안한 것이고, 단순히 마지막 항목을 얻습니다.다음과 같이 표시됩니다.
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
이것은 꽤 오래되었지만 Python 3.4 이상을 사용하는 경우 PathLib를 사용합니다.
# using OS
import os
path=os.path.dirname("C:/folder1/folder2/filename.xml")
print(path)
print(os.path.basename(path))
# using pathlib
import pathlib
path = pathlib.PurePath("C:/folder1/folder2/filename.xml")
print(path.parent)
print(path.parent.name)
os.path.dirname
당신이 찾고 있는 것은 -
os.path.dirname(r"C:\folder1\folder2\filename.xml")
추가해야 합니다.r
원시 문자열로 간주되도록 문자열에 연결합니다.
데모 -
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml")
Out[46]: 'C:\\folder1\\folder2'
네가 원한다면,folder2
위의 예와 함께 사용할 수 있습니다.
os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
데모 -
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Out[48]: 'folder2'
pathlib를 사용할 수 있습니다.
from pathlib import Path
Path(r"C:\folder1\folder2\filename.xml").parts[-2]
위의 결과는 다음과 같습니다.
'folder2'
전체 경로를 문자열로 가져온 다음 운영 체제의 구분 문자를 사용하여 목록으로 분할할 수 있습니다.그런 다음 마이너스 인덱스를 사용하여 목록의 끝에서 요소에 액세스하여 프로그램 이름, 폴더 이름 등을 얻습니다.
다음과 같이:
import os
strPath = os.path.realpath(__file__)
print( f"Full Path :{strPath}" )
nmFolders = strPath.split( os.path.sep )
print( "List of Folders:", nmFolders )
print( f"Program Name :{nmFolders[-1]}" )
print( f"Folder Name :{nmFolders[-2]}" )
print( f"Folder Parent:{nmFolders[-3]}" )
위의 결과는 다음과 같습니다.
Full Path :C:\Users\terry\Documents\apps\environments\dev\app_02\app_02.py
List of Folders: ['C:', 'Users', 'terry', 'Documents', 'apps', 'environments', 'dev', 'app_02', 'app_02.py']
Program Name :app_02.py
Folder Name :app_02
Folder Parent:dev
저는 사용 가능한 솔루션, 즉 모든 것과 함께 작동하는 스니펫을 개선했습니다.
- 파일
- 교육 슬래시가 있는 디렉토리
- 교육 슬래시가 없는 디렉토리
내 해결책은,
from pathlib import Path
def path_lastname(s):
Path(s).with_name("foo").parts[-2]
설명.
Path(s)
다음으로 사용자 지정 경로 개체를 만듭니다.s
그것을 해결하지 않고..with_name("foo")
가짜 파일을 추가합니다.foo
.parts[-2]
문자열의 두 번째 마지막 부분을 반환합니다.-1
는 부은분입니다.foo
동일한 응답을 얻기 위해 두 가지 방법을 사용하고 있습니다. 그 중 하나는 다음과 같습니다.
os.path.basename(filename)
스크립트에서 발견된 오류로 인해 다음으로 변경했습니다.
Path = filename[:(len(filename)-len(os.path.basename(filename)))]
다'▁it▁duearound▁work's▁a니입s방법파로 인한 해결책입니다.'\\'
언급URL : https://stackoverflow.com/questions/33372054/given-a-path-how-can-i-extract-just-the-containing-folder-name
'source' 카테고리의 다른 글
여러 개의 예외가 있는 단일 시도 블록 (0) | 2023.05.21 |
---|---|
어레이 대 링크드 리스트 (0) | 2023.05.21 |
시도 블록의 값을 반환하면 Finally 문의 코드가 실행됩니까? (0) | 2023.05.21 |
확인란 설정/해제 (0) | 2023.05.21 |
Node.js가 종료되기 직전 정리 작업 수행 (0) | 2023.05.21 |