안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
오늘은 파일과 폴더를 이동하거나 복사하고 싶을 때 사용하는 shutil 모듈에 대해서 공부해 보겠습니다.
1. 모듈 불러오기
우선 shutil 모듈은 따로 설치할 필요가 없이 바로 import 해주시면 됩니다. 지난 시간에 배웠던 os 모듈과 같이 파이썬 내장 라이브러리에 포함되어 있는 모듈이기 때문입니다.
import shutil
2. 파일을 특정 폴더로 이동하기_move( )
1) 상대경로 방식
# 방법 1 - 파일과 폴더가 현재 작업경로에 있는 경우만 가능
shutil.move('이동시킬 파일명.확장자', '파일을 이동시킬 폴더명')
# 예시
shutil.move('Test.xlsx', '테스트 폴더')
2) 절대경로 방식
# 방법 2 - 현재 작업경로와 상관없이 절대경로를 입력
shutil.move('이동시킬 파일 경로', '파일을 이동시킬 폴더의 경로')
# 예시
shutil.move('/Users/sangwoo/Desktop/PYTHON BASIC/Shutil Basic/Test.xlsx',
'/Users/sangwoo/Desktop/PYTHON BASIC/Shutil Basic/테스트 폴더')
아래부터는 간결한 글을 위해서 상대 경로 방식으로만 코드를 작성하였으나, 위와 동일하게 절대경로 방식또한 가능한 점 참고해주세요.
3. 폴더를 특정 폴더로 이동하기_move( )
파일과 마찬가지로 폴더도 이동시킬 수 있습니다. 이때 폴더 안의 모든 내용물이 함께 이동됩니다.
1) 폴더가 존재하는 경우
# 방법 1 - 파일과 폴더가 현재 작업경로에 있는 경우만 가능
shutil.move('이동시킬 폴더명', '이동할 폴더를 담을 폴더명')
# 예시
shutil.move('테스트 폴더', '테스트 폴더2')
2) 폴더가 존재하지 않는 경우
코드는 동일하지만 그 결과가 다릅니다. 만약 '테스트 폴더2'가 없는 경우, 기존의 '테스트 폴더'의 이름에 2가 추가되면서 안에는 'Test.xlsx' 파일이 위치하게 됩니다.
4. 파일을 특정 폴더로 복사하기_copy( )
# 방법 1 - 파일과 폴더가 현재 작업경로에 있는 경우만 가능
shutil.copy('복사할 파일명.확장자', '복사한 파일을 담을 폴더명')
# 예시
shutil.copy('Test.xlsx', '테스트 폴더')
5. 폴더를 특정 폴더로 복사하기_copytree( )
# 방법 1 - 파일과 폴더가 현재 작업경로에 있는 경우만 가능
shutil.copytree('복사할 폴더명', '복사될 새로운 폴더명')
# 예시
shutil.copytree('테스트 폴더', '테스트 폴더2')
폴더를 복사할 때 주의할 점은 '복사될 새로운 폴더명'과 동일한 폴더명이 존재하면 아래와 같은 에러 메시지를 띄운다는 것입니다.
FileExistsError: [Errno 17] File exists: '테스트 폴더2'
간단히 말해서, '테스트 폴더2'는 코드가 실행될 때 존재해서는 안됩니다.
만약 원하시는 기능이 기존 존재하는 폴더 안에 특정 폴더를 복사해야 하는 것이라면 아래와 같이 하셔야 합니다.
shutil.copytree('테스트 폴더', '테스트 폴더2/새로운 폴더명')
<참고 자료>
1. 파이썬을 이용한 파일 및 디렉터리 작업 - Code
https://code.tutsplus.com/ko/tutorials/file-and-directory-operations-using-python--cms-25817
2. shutil — 고수준 파일 연산 — Python 3.10.1 문서
'파이썬 패키지 > 폴더, 파일관리' 카테고리의 다른 글
[Python/Zipfile] 파이썬으로 Zip 파일 압축/압축해제하는 법 (0) | 2021.07.02 |
---|---|
[Python / os모듈] 디렉토리(폴더)와 경로 정보 활용하기 (0) | 2021.06.07 |