Python os 모듈(getcwd, mkdir, makedirs, rmdir)

LshDevLog·2026년 2월 16일

python

목록 보기
2/16
post-thumbnail

os모듈의 몇 가지 살펴보기

getcwd

import os

print(os.getcwd())
c:\Users\MSI\PythonStudy

현재 작업 디렉토리(getCurrentWorkingDirectory)의 절대경로 리턴


mkdir

import os

print(os.listdir())

os.mkdir('test_folder')

print(os.listdir())
['data', 'hello.py', 'main.py']
['data', 'hello.py', 'main.py', 'test_folder']

현재 경로에 폴더 생성하고 이미 있는 폴더명이라면 FileExistsError 에러 발생


import os

def make_folder(name):
    full_path = os.path.join(os.getcwd(), name)
    if os.path.exists(full_path):
        print(f'{name} folder already exists')
    else:
        os.mkdir(full_path)
        print(f'{name} folder is made successfully')
    
make_folder('data')

폴더 생성전에 os.path.exists로 이미 존재하는 폴더인지 확인하는게 좋음

    full_path = os.path.join(os.getcwd(), name)    

참고로 os.path.join은 OS마다 다른 경로 구분자를 하나의 코드로 대응할 수 있게 해줌
경로 구분자(path separator)는 윈도우에서 \로 표현하고 유닉스계열(Linux, macOS)은 /로 표현함
join을 사용하면 경로 구분자 문제로부터 안전


makedirs

import os

os.makedirs("a/b/c", exist_ok=True)

한번에 여러 폴더 생성가능
a가 이미 있어도 b, c폴더가 성공적으로 생성됨


import os

folder = "test_folder"

print(os.listdir())

os.makedirs(folder, exist_ok=True)

print(os.listdir())

makedirs에 exist_ok를 True로 하면 생성하려는 폴더가 존재해도 에러없이 넘어가고 False는 기존처럼 중복시 에러 발생
mkdir로 폴더를 생성할때 os.path.exists로 중복 체크를 하던 방식보다 편함


rmdir

import os

folder = 'test_folder'

os.mkdir(folder)
print(os.listdir())
os.rmdir(folder)
print(os.listdir())
['data', 'hello.py', 'main.py', 'test_folder']
['data', 'hello.py', 'main.py']

폴더를 삭제


import os

folder = 'a/b'

os.makedirs(folder, exist_ok=True)
print(os.listdir())
os.rmdir('a')
print(os.listdir())
['a', 'data', 'hello.py', 'main.py']
Traceback (most recent call last):
  File "C:\Users\MSI\PythonStudy\main.py", line 7, in <module>
    os.rmdir('a')
    ~~~~~~~~^^^^^
OSError: [WinError 145] 디렉터리가 비어 있지 않습니다: 'a'

삭제하려는 폴더안에 파일이 존재하면 삭제 실패하고 에러가 뜸


import os
import shutil

folder = 'a/b'

os.makedirs(folder, exist_ok=True)
print(os.listdir())
shutil.rmtree('a')
print(os.listdir())
['a', 'data', 'hello.py', 'main.py']
['data', 'hello.py', 'main.py']

shutil 모듈의 rmtree를 사용하면 폴더와 폴더안에 있는 파일들까지 한번에 삭제 가능


추가 정리

절대경로

루트부터 시작해 파일/폴더의 위치를 정확하게 지정한 경로
현재 작업 디렉토리(CWD)의 영향을 받지 않음

#Windows
C:\Users\LshDevLog\PythonStudy\data\file.txt

#Linux
/home/lshdevlog/PythonStudy/data/file.txt

윈도우는 드라이브 문자(C:)로 시작
리눅스는 루트(/)로 시작


상대경로

현재 작업 디렉토리(CWD)를 기준으로 지정한 경로
CWD가 바뀌면 경로도 달라짐


Traceback

에러가 어디서 어떤 순서로 왜 발생했는지 알려주는 디버깅 정보

Traceback (most recent call last):
  File "C:\Users\MSI\PythonStudy\main.py", line 7, in <module>
    os.rmdir('a')
    ~~~~~~~~^^^^^
OSError: [WinError 145] 디렉터리가 비어 있지 않습니다: 'a'

가장 마지막 줄에서 에러 확인
에러 윗줄이 에러 발생 위치
은 함수밖 코드, 클래스 밖 코드, 바로 실행되는 위치를 뜻함
python파일 = module로 봄

0개의 댓글