파이썬으로 파일이나 디렉터리 경로 다루기

Python // 2024년 05월 29일 작성 // 2024년 05월 31일 업데이트

파이썬(Python)으로 파일이나 디렉터리 경로(path)를 다루는 몇 가지 방법을 정리해보자. 아마도 리눅스나 맥 등의 POSIX 호환 OS에서는 다 잘 작동할 것이지만 윈도우의 경우는 동작을 확인하지 못했다는 점에 주의하자.

경로 조합하기

>>> import os
>>> os.path.join('/foo/bar', 'qwer', 'test.txt')
'/foo/bar/qwer/test.txt'

os.path.join의 입력 갯수는 자유로운 편이다.

경로에서 파일명만 얻기

>>> import os
>>> os.path.basename('/foo/bar/test.txt')
'test.txt'

참고로 아래의 '경로에서 디렉터리와 파일명을 분리하기' 항목에서 언급할 os.path.split을 이용해도 된다.

경로에서 디렉터리만 얻기

>>> import os
>>> os.path.dirname('/foo/bar/test.txt')
'/foo/bar'

해당 파일이 위치하는 디렉터리를 알아낼 때 유용하다.

아래 '경로에서 디렉터리와 파일명을 분리하기' 항목에서 언급된 os.path.split을 사용할 수도 있다.

파일명이나 경로에서 확장자를 제거하거나 알아내기

>>> import os
>>> os.path.splitext('test.txt')
('test', '.txt')
>>> os.path.splitext('/foo/bar/test.txt')
('/foo/bar/test', '.txt')

입력된 경로에서 파일명의 확장자를 바꿔서 출력해야 되는 경우, 혹은 특정 파일의 확장자만 얻어내야 할 경우 등에서 유용하게 쓸 수 있다.

반환되는 확장자에 .이 앞에 붙어있다는 점은 주의하자.

경로에서 디렉터리와 파일명을 분리하기

>>> import os
>>> os.path.split('/foo/bar/sample.txt')
('/foo/bar', 'sample.txt')
>>> os.path.split('/foo/bar')
('/foo', 'bar')

두 번째 예제에서 볼 수 있듯이 os.path.split은 경로에서 마지막 컴포넌트만 분리해주는 기능이기 때문에 파일이 아니라 마지막 디렉터리를 떼어내는 용도로도 쓸 수 있다.

상대경로 얻기

>>> import os
>>> os.path.relpath('/foo/bar/qwer/test.txt', '/foo/bar')
'qwer/test.txt'

첫 번째 인자가 절대경로이고 두 번째 인자는 첫 번째 인자의 절대경로를 상대경로로 표현할 기준 경로다.

관련된 글들