이 라이브러리들을 엄청 자주쓰지는 않지만 가끔 쓸 때 매일 까먹는다.
그래서 간단하게 가장 기본적이고 핵심적인 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("파일모음")
끗!
'CS' 카테고리의 다른 글
1장. 컴퓨터 시스템 (Computer Systems A Programmer's Perspective) (1) | 2024.09.08 |
---|---|
인증과 인가 / 쿠키와 세션 / 토큰과 JWT 이란 ? (0) | 2024.09.06 |
API (Application Programming Interface)는 무엇일까 ? (0) | 2024.07.02 |
명령 프롬프트(터미널)로 특정 파일 찾기 (0) | 2024.03.18 |
Network,TCP/IP protocol 기본 개념 (컴퓨터 지식) (1) | 2023.10.24 |