os모듈의 몇 가지 살펴보기
import os
print(os.getcwd())
c:\Users\MSI\PythonStudy
현재 작업 디렉토리(getCurrentWorkingDirectory)의 절대경로 리턴
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을 사용하면 경로 구분자 문제로부터 안전
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로 중복 체크를 하던 방식보다 편함
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 (most recent call last):
File "C:\Users\MSI\PythonStudy\main.py", line 7, in <module>
os.rmdir('a')
~~~~~~~~^^^^^
OSError: [WinError 145] 디렉터리가 비어 있지 않습니다: 'a'
가장 마지막 줄에서 에러 확인
에러 윗줄이 에러 발생 위치
은 함수밖 코드, 클래스 밖 코드, 바로 실행되는 위치를 뜻함
python파일 = module로 봄