CS

[Python] os/shutil 라이브러리 정리

Jerry_K 2023. 11. 9. 17:31

이 라이브러리들을 엄청 자주쓰지는 않지만 가끔 쓸 때 매일 까먹는다.

그래서 간단하게 가장 기본적이고 핵심적인 os/shutil 라이브러리 함수를 정리해보았다.

이거 익숙해지면 폴더 관련해서 노가다 안해도 된다 ...ㅎㅎ!!

 

 

가장 먼저 os,shutil의 라이브러리를 호출한다.

import os
import shutil

 

 

- 경로 확인

[현재 작업 경로]

os.getcwd() # 현재 작업 경로

지금 실행 파일의 작업 경로가 나온다

 

 

[해당 경로의 파일들 확인]

os.listdir() #해당 경로의 파일들 확인

현재 경로상의 파일 리스트이다. 

 

 

os.listdir(path= '/Users/jerim/Desktop/따릉이')  # path = "찾고자 하는 경로"

만일 특정 경로의 파일 리스트를 보고싶을 때는 path 값만 변경해주면 된다.

 

 

- 경로 바꾸기

os.chdir("/Users")  # 바꿀 경로 입력

이렇게하면 현재 설정되어있는 경로를 원하는 경로로 바꿔준다.

 

 

- 파일 만들기

os.mkdir('/Users/jerim/fish')

이렇게하면 파일이 생성이 된다.  주의 할 점은 만들려하는 fish파일 이전의  디렉토리가 없으면 안된다.

 

os.makedirs('/Users/jerim/A/B/C') #중간에 경로 없어도 생성 가능

중간에 디렉토리가 없어도 생성 가능하게 하고 싶으면 이렇게 코드를 만들면 된다. 

(코드 실행 이전에 /Users/jerim에 A/B/C 경로의 파일은 존재하지 않았음)

 

 

- 파일 제거

shutil.rmtree('/Users/jerim/A')  # 해당 폴더 또는 파일 완전 제거

os.remove()의 함수도 있지만, 대부분의 컴퓨터에서 안되는 것 같다. 

그래서 shutil 함수를 통해 지운다. (shutil은 파일이나 디렉터리에 고수준 명령을 모은 모듈)

위와 같은 코드를 쓰면 A에 연결 된 경로 파일들은 싹 지워진다.

 

os.rmdir('/Users/jerim/fish') # 디렉토리가 비워져있어야 함

단일 디렉토리 제거에는 이렇게 쓰기도 한다.  하지만 해당 디렉토리가 완전 비워져있어야한다.

만일 fish폴더에 어떤 파일이 있으면 이 명령어는 사용 할 수 없다.

 

# 디렉토리가 비워져있어야함 (가장 끝에 디렉토리로 해야함)
# 경로상의 빈 디렉토리 모두 제거
os.removedirs(r"/Users/jerim/A/B/C")

마찬가지로 연결된 다중 디렉토리를 제거하고 싶으면 이렇게 쓰면 된다. 이것 역시 디렉토리가 비워져야 한다.

이 코드를 사용하면 해당경로에 비워져있는 폴더만 지워준다. 파일이 있는거는 그냥 놔둔다.

 

 

- 파일,파일 이름 변경

os.rename("/Users/jerim/A",'/Users/jerim/fish')  
# os.rename("현재 폴더명","바꾸고 싶은 폴더명")

폴더나 파일의 이름을 바꾸고 싶을 때 이렇게 코드를 작성하면 된다.

 

os.renames('/Users/jerim/A/B/C','/Users/jerim/C/B/A')
# os.renames("기존 폴더명",  "바꿀 폴더명")

다중 경로의 폴더명을 바꾸고 싶으면 이렇게 하면된다. 특이사항은 빈 디렉토리만 바뀐다.

그리고 경로의 개수가 맞아야 된다.

 

os.replace('/Users/jerim/A',"/Users/jerim/D")

os.replace은 디렉토리가 비워있던 신경쓰지 않고 원하는 파일 또는 폴더의 이름으로 바꿔준다.

 

 

- 문자열 핸들링

[문자열 합치기]

# 경로 구성요소 결합하여 하나의 경로 생성 
path = os.path.join('/Users/jerim', 'A')

문자열 경로를 만들어준다.  그냥 문자열이다 ...

 

[문자열 분해]

a,b = os.path.split(path)

튜플로 문자열을 분해해주는데 맨 뒤에꺼만 분해 해준다고 보면 된다.

 

 


[간단한  예시]

아무데나 폴더를 만들어 jupyter notebook을 실행한다. 

 

 

import os 
import shutil
for i in range(100):
    os.mkdir(f"{i}")

100개를 폴더을 만듬

근데 fish_1~100으로 바꾸고 싶네...?!

 

 

for i in range(100):
    os.rename(f"{i}",f"fish_{i}")

 

조았으 !

이제 이 폴더들을 깔끔하게 하나의 파일에 다 넣어줘야지 !

 

 

os.mkdir("파일모음")
for i in range(100):
    os.rename(f"fish_{i}",f"파일모음/fish_{i}")

그 다음에는 뭘 하지...

각자 폴더에 아무 의미 없는 폴더를 넣어봐야겠다.

 

 

files = os.listdir(path="파일모음")

for idx,file in enumerate(files) :
    path = os.path.join(os.getcwd(),"파일모음",file,"아무의미없음")
    os.mkdir(path)

fish_1~100까지 무의미없는 폴더가 잘 들어갔다 !! 

이제 이 의미없는 폴더들을 삭제하고 포스팅 마무리 해야지 ..

 

 

shutil.rmtree("파일모음")

 

끗!