source

경로가 주어지면 포함된 폴더 이름만 추출하려면 어떻게 해야 합니까?

manycodes 2023. 5. 21. 11:41
반응형

경로가 주어지면 포함된 폴더 이름만 추출하려면 어떻게 해야 합니까?

파이썬에서 작업 중인 파일이 들어 있는 폴더의 이름을 얻으려면 어떤 명령을 사용해야 합니까?

"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

저는 사용 가능한 솔루션, 즉 모든 것과 함께 작동하는 스니펫을 개선했습니다.

  1. 파일
  2. 교육 슬래시가 있는 디렉토리
  3. 교육 슬래시가 없는 디렉토리

내 해결책은,

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

반응형