IT/언어

[python] os.path.join사용법

개발자 두더지 2021. 5. 11. 13:08
728x90

os.path.join이란


 경로(패스)명 조작에 관한 처리를 모아둔 모듈로써 구현되어 있는 함수의 하나이다. 인수에 전달된 2개의 문자열을 결합하여, 1개의 경로로 할 수 있다. os.path.jon()을 사용하기 위해서는, os 모듈을 import할 필요가 있다.

 실제로 os.path.join()을 호출하는 방법과 실행 결과를 확인해보자.

#! /usr/bin/env python
import os

print("join(): " + os.path.join("/A/B/C", "file.py"))

 실행결과는 다음과 같다.

join(): /A/B/C/file.py

 이와 같이 경로와 피일명을 결합하거나 분할된 경로를 하나로 정리하거나하는 것이 가능하다. 아래에서는 구체적인 사용법에 대해서 알아보고자한다.

 

 

join 활용법


리스트를 이용한 경로 생성

join()의 인수로 리스트를 전달하는 것도 가능하다.

다만, 주의점은 리스트를 전개해서 넘겨야한다는 것이다.

샘플 코드에서는 join()의 인수로써 전달된 list_path의 앞에 *(애스터리스크)를 붙여 리스트를 전개하고 있다.

import os
list_path = ['C:\\', 'Users', 'user']
folder_path = os.path.join(*list_path) 
folder_path
'C:\\Users\\user'

 

실행 파일의 어떤 한 디렉토리에 새로운 파일을 생성

 먼저 처음에 살펴 볼 것은 join()를 호출하고 있는 실행 파일의 어떤 한 디렉토리에 새로운 파일을 생성하는 방법이다. 실행 파일의 디렉토리를 취득하기 위해서는 아래와 같은 작성한다.

#! /usr/bin/env python
import os

print("join(): " + os.path.join(os.path.abspath(os.path.dirname(__file__)), "file.py"))

 그러면 여기에서는 아래와 같이 실행된다.

1. "__file__"에서 실행중의 파일을 표시

2. "os.path.dirnam"으로 실행 파일의 상대경로를 표시

3. "os.path.abspat"으로 위의 경로를 절대경로로 변환

 즉 의 코드를 실행시키면, 절대 경로를 얻을 수 있다.

 실행 결과는, 아래와 같다.

join(): /Users/XXX/Desktop/os-path-join/file.py

 

현재의 디렉토리에 새로운 파일을 생성

 이번에는 실행 파일이아닌 현재 디렉토리를 참고해보자. 스키립트를 실행한 시점에서는 실행 파일의 경로가 현재 디렉토리가 되지만, 디렉토리 이동등을 하려는 경우에는 현재의 디렉토리를 얻어야할 필요가 있다.

 현재 디렉토리를 얻어내는 방법은 다음과 같다.

#! /usr/bin/env python
import os

print("join(): " + os.path.join(os.getcwd(), "file.py"))

 위와 같이 os.getcwd()에서 현재의 디렉토리를 취득할 수 있다. 실행 결과는 "현재의 디렉토리(절대 경로)/file.py"이 된다.

절대경로란, 제일 상위의 디렉토리로부터의 경로를 모두 적혀있는 경로이다.

 

패스에 디렉토리의 구분 문자가 포함되어 있는 경우

결합하는 경로명에 디렉토리의 구분 문자("/"등)가 포함되어 있는 경우를 살펴보자.

#! /usr/bin/env python

import os

print(os.path.join("dirA", "dirB", "/dirC"))

print(os.path.join("/dirA", "/dirB", "dirC"))

print(os.path.join("/dirA", "dirB", "dirC"))

 세 가지 전부, /dirA/dirB/dirC로 결합될 것 같지만, 실행 결과를 보면 아래와 같이 출력된다.

/dirC
/dirB/dirC
/dirA/dirB/dirC

 실제로는 join()은 디렉토리의 구분 문자가 들어있으면, 그것을 root로 보는 성질이 있다. 대처법으로는 먼저 리스트를 이용해 문자열을 바꿔 쓰는 방법이 있다.

#! /usr/bin/env python

import os

path = ["/dirA", "/dirB", "/dirC"]

path = [dir.replace("/", "") for dir in path] #리스트의 문자열 변경
print("join(): " + os.path.join(*path))

 실행 결과는 다음과 같이 정상적으로 결합되었다.

join(): dirA/dirB/dirC

참고자료

potesara-tips.com/os-path-join/

www.sejuku.net/blog/64408

minus9d.hatenablog.com/entry/2014/12/27/014243

728x90