Python

[python] os, os.path로 파이썬 경로 다루기

언킴 2022. 4. 1. 21:50
반응형

Contents

     

     

    로컬 환경에서 예제 csv 파일을 다룰 때는 본인이 위치해있는 폴더에 csv 파일을 같이 놔두고 분석을 수행하기에 경로 설정 문제를 겪을 일이 거의 없다. 하지만 협업을 진행할 때에는 사람마다 파일의 위치가 다르기에 모든 환경에서 돌아가도록 절대 경로, 상대 경로 등 경로를 제대로 지정해주어야 한다. 이번 글에서는 python 패키지 중 os, sys로 경로를 설정하는 방법에 대해서 다루어볼 것이다. 

     

    os

    os는 경로를 조작할 때 많이 사용하는 모듈이다. os 모듈 중에서 가장 많이 사용되는 함수에 대해서 다루어보자. 

     

    os.environ : 환경 확인

    os.environ은 환경 변수들을 확인할 수 있는 함수이다. 환경 변수에는 JAVE_HOME, HADOOP_HOME, HOMEPATH, PYTHONPATH 등 여러 환경 변수들이 존재하는데, 이를 확인할 수 있다. 

    import os 
    
    os.environ['PATH']
    os.environ['PYTHONPATH']
    os.environ['USERNAME']
    os.environ['JAVA_HOME']
    os.environ['HADOOP_HOME']
    os.environ['HOMEPATH']

     

    os.chdir : 경로 변경

    os.chdir는 경로를 변경해주는 함수이다. PATH를 지정해두면 해당 PATH로 경로 변경이 가능하다. 

    PATH = '경로'
    os.chdir(PATH)

     

    os.getcwd : 현재 경로 확인

    os.getcwd는 현재 경로가 어디에 위치되어 있는지 확인 할 수 있는 코드로써, 유용하게 사용된다. 

    os.getcwd()
    PATH = os.getcwd() + '\file'
    os.chdir(PATH)
    os.getcwd()

    현재 경로에서 file이라는 폴더로 경로를 변경하고 싶을 때 \file을 추가해줌으로써 경로를 변경하고 경로가 바뀐 것을 확인할 수 있을 것이다. 

     

    os.listdir : 폴더명 반환

    PATH를 입력했을 경우 해당 directory에 있는 항목들의 이름을 반환해준다. 리스트 내 항목을든 임의의 순서로 나열되며, '.', '..' 로 시작하는 파일명은 호출되지 않기에 주의하자.

    os.listdir(path = '.')
    
    os.listdir(path = '..') # abspath
    
    PATH = r'C:/Users'
    os.listdir(PATH)

    os.listdir의 기본값은 path='.'이며 현재 경로에서의 파일이름을 반환해준다. path='..'로 설정할 경우 절대 경로에서 접근하며 PATH를 따로 지정해줄 수도 있다. python 3.2 아래의 version을 사용하는 경우 path를 필수적으로 작성해주어야 되지만, 3.2 이후 버전부터는 선택사항이라 고려하지 않아도 된다. 

     

    os.mkdir, os.makedirs : 폴더 생성

    os.mkdir는 많이 사용하는 함수 중 하나이다. 이름에서도 느껴지듯 directory에 folder를 만들어주는 함수이다. os.makedirs도 folder를 생성해주는 함수이지만 exist_ok라는 인자가 존재해 True로 지정할 경우 해당 directory에 folder가 존재하더라도 에러코드를 발생시키지 않지만, False로 지정할 경우 FileExistsError를 반환한다. 추가적으로 os.mkdir의 경우 가장 마지막에 위치해 있는 folder만 생성해주는  반면에, os.makedirs를 사용하게 되면 해당 경로의 모든 폴더를 만들어줌으로 조금 더 유용하다. 

    PATH = os.getcwd() 
    file_name = r'\a'
    os.mkdir(path = PATH + file_name)
    
    
    PATH = os.getcwd() 
    file_name = r'\a'
    os.makedirs(name = PATH + file_name, exist_ok = False)

     

    os.remove: 파일 삭제

    PATH에 존재하는 파일을 지우는 함수이며, 사용 중인 파일을 제거하려고 시도할 경우 유닉스에서는 삭제가 되지만, 윈도우에서는 삭제가 되지 않는다. 만약 해당 파일이 존재하지 않을 경우 FileNotFoundError를 반환한다. 

    # os.remove
    PATH = os.getcwd()
    file_name = r'\a'
    os.remove(PATH + file_name)

     

    os.path

    os.path는 폴더명이나 파일명을 확인하고 존재유무를 파악할 수 있도록 도와주는 모듈이다. 

     

    os.path.abspath : 절대 경로 반환

    폴더 혹은 파일이 존재하는 위치에서의 절대 경로를 반환한다. 

    PATH = os.getcwd()
    os.path.abspath(PATH)

     

    os.path.basename

    PATH의 기본 이름을 반환합니다. 예를 들어 PATH=r'c:\Users\Desktop\test.csv' 라고 한다면 이 PATH의 기본 이름은 test.csv가 된다. PATH를 split('\')해서 마지막 요소를 반환해주는 것과 동일하다. 

    PATH
    PATH.split('\\')[-1] == os.path.basename(PATH) # True

     

    os.path.dirname

    PATH의 directory 명을 반환한다.  예를 들어 PATH=r'c:\Users\Desktop\test\os' 라고 한다면 os.path.dirname의 반환값은 test가 된다. 

    # os.path.dirname
    os.path.dirname(PATH)

     

    os.path.split

    dirname의 경우 입력 경로의 폴더 경로까지 반환하지만, basename의 경우 파일이름만 출력한다는 차이가 존재한다. dirname과 basename을 한 번에 확인하고 싶을 때는 os.path.split 모듈을 사용하면 tuple형태로 반환한다.

    # os.path.dirname
    os.path.dirname(PATH)
    
    DIRNAME, BASENAME = os.path.split(PATH)
    DIRNAME == os.path.dirname(PATH) # True
    BASENAME == os.path.basename(PATH) # True

     

    os.path.exists

    PATH가 존재하면 True를 반환하고, 존재하지 않을 경우 False를 반환한다. 

    # os.path.exists 
    os.path.exists(PATH) # True
    os.path.exists(PATH + r'\a') # False

     

    os.path.isfile, os.path.isdir

    isfile은 PATH가 존재하는 파일명일 경우 True를 반환하고, isdir의 경우 존재하는 directory일 경우 True를 반환한다. 

    # os.path.isfile 
    PATH = os.getcwd()
    os.path.isfile(PATH) # False
    
    # os.path.isdir
    os.path.isdir(PATH) # True

    예제에서는 PATH를 directory 명으로 설정해두었기에 isfile의 경우 False를 반환하고, isdir의 경우 True를 반환하는 것을 확인할 수 있다. 

     

    os.path.join

    경로와 파일명을 결합하고 싶을 때 사용하는 모듈이다. 해당 파일이 위치한 절대경로를 불러와 파일명을 결합할 수도 있다. BASE_PATH를 설정해주거나 할 때 사용된다. 

    # os.path.join 
    PATH = os.getcwd()
    DIRNAME, BASENAME = os.path.split(PATH)
    PATH == os.path.join(DIRNAME, BASENAME) # True

     

    'Python' 카테고리의 다른 글

    numpy array 구조를 image로 저장하기  (0) 2022.06.01
    [Python] ConnectionResetError (request)  (0) 2022.04.27
    request <Response [401]>  (0) 2022.03.11
    [Python] Class  (0) 2022.01.14
    [Python] Open file  (0) 2021.09.30