파이썬에서 부모 디렉토리를 어떻게 얻습니까?
누군가가 크로스 플랫폼 방식으로 파이썬에서 경로의 부모 디렉토리를 얻는 방법을 말해 줄 수 있습니까? 예 :
C:\Program Files ---> C:\
과
C:\ ---> C:\
디렉토리에 상위 디렉토리가 없으면 디렉토리 자체를 리턴합니다. 질문은 간단 해 보이지만 Google을 통해 파헤칠 수 없습니다.
Python 3.4에서 업데이트
pathlib
모듈을 사용하십시오 .
from pathlib import Path
path = Path("/here/your/path/file.txt")
print(path.parent)
이전 답변
이 시도:
import os.path
print os.path.abspath(os.path.join(yourpath, os.pardir))
yourpath
부모가 원하는 경로는 어디 입니까?
사용 os.path.dirname
:
>>> os.path.dirname(r'C:\Program Files')
'C:\\'
>>> os.path.dirname('C:\\')
'C:\\'
>>>
주의 사항 : os.path.dirname()
후행 슬래시가 경로에 포함되는지 여부에 따라 다른 결과를 제공합니다. 이것은 원하는 의미론 일 수도 있고 아닐 수도 있습니다. Cf. @ kender의 대답은 사용 os.path.join(yourpath, os.pardir)
.
파이썬 3.4 이상
from pathlib import Path
Path('C:\Program Files').parent
추가 정보
새로운 pathlib 라이브러리는 경로와 일반적인 파일 작업을 사용하여 통합하고 단순화합니다. 다음은 문서의 일부 예입니다.
디렉토리 트리 내에서 탐색 :
>>>
>>> p = Path('/etc')
>>> q = p / 'init.d' / 'reboot'
>>> q
PosixPath('/etc/init.d/reboot')
>>> q.resolve()
PosixPath('/etc/rc.d/init.d/halt')
쿼리 경로 속성 :
>>>
>>> q.exists()
True
>>> q.is_dir()
False
import os
p = os.path.abspath('..')
C:\Program Files
---> C:\\\
C:\
---> C:\\\
@kender의 대체 솔루션
import os
os.path.dirname(os.path.normpath(yourpath))
yourpath
부모가 원하는 경로는 어디 입니까?
그러나이 솔루션은 yourpath
빈 문자열이나 점이있는 경우를 처리하지 않기 때문에 완벽하지 않습니다 .
이 다른 솔루션은이 코너 케이스를보다 잘 처리합니다.
import os
os.path.normpath(os.path.join(yourpath, os.pardir))
다음은 찾을 수있는 모든 경우에 대한 출력입니다 (입력 경로는 상대적입니다).
os.path.dirname(os.path.normpath('a/b/')) => 'a'
os.path.normpath(os.path.join('a/b/', os.pardir)) => 'a'
os.path.dirname(os.path.normpath('a/b')) => 'a'
os.path.normpath(os.path.join('a/b', os.pardir)) => 'a'
os.path.dirname(os.path.normpath('a/')) => ''
os.path.normpath(os.path.join('a/', os.pardir)) => '.'
os.path.dirname(os.path.normpath('a')) => ''
os.path.normpath(os.path.join('a', os.pardir)) => '.'
os.path.dirname(os.path.normpath('.')) => ''
os.path.normpath(os.path.join('.', os.pardir)) => '..'
os.path.dirname(os.path.normpath('')) => ''
os.path.normpath(os.path.join('', os.pardir)) => '..'
os.path.dirname(os.path.normpath('..')) => ''
os.path.normpath(os.path.join('..', os.pardir)) => '../..'
입력 경로는 절대적입니다 (Linux 경로) :
os.path.dirname(os.path.normpath('/a/b')) => '/a'
os.path.normpath(os.path.join('/a/b', os.pardir)) => '/a'
os.path.dirname(os.path.normpath('/a')) => '/'
os.path.normpath(os.path.join('/a', os.pardir)) => '/'
os.path.dirname(os.path.normpath('/')) => '/'
os.path.normpath(os.path.join('/', os.pardir)) => '/'
os.path.split(os.path.abspath(mydir))[0]
os.path.abspath(os.path.join(somepath, '..'))
관찰 :
import posixpath
import ntpath
print ntpath.abspath(ntpath.join('C:\\', '..'))
print ntpath.abspath(ntpath.join('C:\\foo', '..'))
print posixpath.abspath(posixpath.join('/', '..'))
print posixpath.abspath(posixpath.join('/home', '..'))
import os
print"------------------------------------------------------------"
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
print("example 1: "+SITE_ROOT)
PARENT_ROOT=os.path.abspath(os.path.join(SITE_ROOT, os.pardir))
print("example 2: "+PARENT_ROOT)
GRANDPAPA_ROOT=os.path.abspath(os.path.join(PARENT_ROOT, os.pardir))
print("example 3: "+GRANDPAPA_ROOT)
print "------------------------------------------------------------"
당신이 원하는 경우 에만 이름 인수 및 제공 파일의 바로 부모 폴더의 하지 절대 경로 해당 파일을 :
os.path.split(os.path.dirname(currentDir))[1]
즉, currentDir
값이/home/user/path/to/myfile/file.ext
위 명령은 다음을 반환합니다.
myfile
>>> import os
>>> os.path.basename(os.path.dirname(<your_path>))
예를 들어 우분투에서 :
>>> my_path = '/home/user/documents'
>>> os.path.basename(os.path.dirname(my_path))
# Output: 'user'
예를 들어 Windows의 경우 :
>>> my_path = 'C:\WINDOWS\system32'
>>> os.path.basename(os.path.dirname(my_path))
# Output: 'WINDOWS'
두 예제 모두 Python 2.7에서 시도했습니다.
import os.path
os.path.abspath(os.pardir)
Tung의 답변에 무언가를 추가하기 만하면됩니다 ( rstrip('/')
유닉스 상자에 있으면 더 안전한면을 사용해야합니다).
>>> input = "../data/replies/"
>>> os.path.dirname(input.rstrip('/'))
'../data'
>>> input = "../data/replies"
>>> os.path.dirname(input.rstrip('/'))
'../data'
그러나을 사용하지 않으면 rstrip('/')
입력 내용이
>>> input = "../data/replies/"
출력
>>> os.path.dirname(input)
'../data/replies'
이는 당신이 모두를 원하는대로에서 무엇을 찾고있어 아마하지 않습니다 "../data/replies/"
와 "../data/replies"
같은 방식으로 작동 할 수 있습니다.
print os.path.abspath(os.path.join(os.getcwd(), os.path.pardir))
이것을 사용하여 py 파일의 현재 위치의 부모 디렉토리를 얻을 수 있습니다.
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_path = os.path.abspath(os.path.join(dir_path, os.pardir))
다음과 같은 디렉토리 구조가 있다고 가정하십시오.
1]
/home/User/P/Q/R
디렉토리 R에서 "P"의 경로에 액세스하고 싶을 때
ROOT = os.path.abspath(os.path.join("..", os.pardir));
2]
/home/User/P/Q/R
디렉토리 R에서 "Q"디렉토리의 경로에 액세스하려고합니다.
ROOT = os.path.abspath(os.path.join(".", os.pardir));
부모 디렉토리 경로 를 가져 와서 새 디렉토리를 만드십시오 (name new_dir
)
부모 디렉토리 경로 얻기
os.path.abspath('..')
os.pardir
실시 예 1
import os
print os.makedirs(os.path.join(os.path.dirname(__file__), os.pardir, 'new_dir'))
실시 예 2
import os
print os.makedirs(os.path.join(os.path.dirname(__file__), os.path.abspath('..'), 'new_dir'))
os.path.abspath('D:\Dir1\Dir2\..')
>>> 'D:\Dir1'
그래서 ..
도움이
import os
def parent_filedir(n):
return parent_filedir_iter(n, os.path.dirname(__file__))
def parent_filedir_iter(n, path):
n = int(n)
if n <= 1:
return path
return parent_filedir_iter(n - 1, os.path.dirname(path))
test_dir = os.path.abspath(parent_filedir(2))
위에 주어진 대답은 모두 하나 또는 두 개의 디렉토리 레벨로 올라가는 데는 완벽하지만, 디렉토리 트리를 여러 레벨 (예 : 5 또는 10)로 탐색해야하는 경우 약간 번거로울 수 있습니다. N
os.pardir
의의 목록에 가입하면 간결하게 수행 할 수 있습니다 os.path.join
. 예:
import os
# Create list of ".." times 5
upup = [os.pardir]*5
# Extract list as arguments of join()
go_upup = os.path.join(*upup)
# Get abspath for current file
up_dir = os.path.abspath(os.path.join(__file__, go_upup))
참고 URL : https://stackoverflow.com/questions/2860153/how-do-i-get-the-parent-directory-in-python
'Programing' 카테고리의 다른 글
iTerm2 키보드 단축키-분할 분할 창 탐색 (0) | 2020.03.16 |
---|---|
AngularJS를 사용하여 전체 페이지를 다시로드하거나 다시 렌더링하는 방법 (0) | 2020.03.16 |
장치의 실행 화면에서 UIImageView 이미지가 누락 됨 (0) | 2020.03.16 |
React 컴포넌트 외부의 클릭 감지 (0) | 2020.03.16 |
data.frame에서 단일 열의 이름을 바꾸는 방법은 무엇입니까? (0) | 2020.03.16 |