[Python] 파일 관리: shutil module

Jae Gyeong Lee·2024년 10월 25일

shutil(shell utilities)

  • 파일 또는 폴더 복사/이동/삭제 등 기능을 제공하는 파일 관리 작업 모듈
  • src(source), dst(destination)
import shutil #파이썬 내장

1. 복사

1.1. 파일 복사

  • copy(), copyfile(): 파일의 메타정보는 복사하지 않음(복사한 파일의 수정 날짜 = 복사 시점)
  • copy2(): 파일의 메타정보도 복사(복사한 파일의 수정 날짜 = 기존 파일의 수정 날짜)
shutil.copy(src, dst)

shutil.copyfile(src, dst)

shutil.copy2(src, dst)
import shutil
import os

file_name = r'test_txt.txt'
file_path_1 = r'C:\Users\jaegyeong\Desktop\Shutil_1'
file_path_2 = r'C:\Users\jaegyeong\Desktop\Shutil_2'

file1 = os.path.join(file_path_1, file_name)
file2 = os.path.join(file_path_2, file_name)

shutil.copy(file1, file2) #1
shutil.copyfile(file1, file2) #2
shutil.copy2(file1, file2) #3
  • < dst >가 이미 존재하는 경우, 파일 덮어쓰기됨

1.2. 폴더복사

shutil.copytree(src, dst)
folder_path_1 = r'C:\Users\jaegyeong\Desktop\Shutil_1'
folder_path_2 = r'C:\Users\jaegyeong\Desktop\Shutil_3' 

shutil.copytree(folder_path_1, folder_path_2)

ㄴ Shutil_3 폴더가 없으면, Shutil_3 폴더 생성 후 Shutil_1 폴더와 하위 폴더와 파일들이 모두 복사
  • < dst >가 이미 존재하는 경우, 에러 발생(덮어쓰기 불가)

    ㄴ덮어쓰고 싶은 경우 아래 모듈과 함수 사용

from distutils.dir_util import copy_tree

copy_tree(src, dst)
from distutils.dir_util import copy_tree

folder_path_1 = r'C:\Users\jaegyeong\Desktop\Shutil_1'
folder_path_2 = r'C:\Users\jaegyeong\Desktop\Shutil_3'

copy_tree(folder_path_1, folder_path_2)

2. 이동

파일 또는 폴더를 특정 폴더로 이동

  • 폴더를 특정 폴더로 이동시킬 시, 폴더 내 모든 파일 함께 이동

2.1. 폴더1>파일 → 폴더2 간 이동

shutil.move(src, dst)
folder_path_1 = r'C:\Users\jaegyeong\Desktop\Shutil_1\test_txt.txt'
folder_path_2 = r'C:\Users\jaegyeong\Desktop\Shutil_2'

shutil.move(folder_path_1, folder_path_2)

2.2. 폴더1 → 폴더2 간 이동

shutil.move(src, dst)
folder_path_1 = r'C:\Users\jaegyeong\Desktop\Shutil_1'
folder_path_2 = r'C:\Users\jaegyeong\Desktop\Shutil_2'

shutil.move(folder_path_1, folder_path_2)
folder_path_1 = r'C:\Users\jaegyeong\Desktop\Shutil_1'
folder_path_2 = r'C:\Users\jaegyeong\Desktop\Shutil_2\Shutil_3'

shutil.move(folder_path_1, folder_path_2)
  • <이동될경로+폴더명>의 폴더가 존재하지 않는 경우, <이동할경로+폴더명>의 폴더명이 <이동될_경로+폴더명>으로 변경됨

3. 삭제

폴더 및 폴더 내 하위 폴더 및 파일 삭제

shutil.rmtree(삭제할_폴더)
  • <삭제할_폴더>에 있는 모든 하위 폴더와 파일이 삭제

참고) https://docs.python.org/ko/3/library/shutil.html

profile
안녕하세요 반갑습니다. 공부한 내용들을 기록하고 있습니다.

0개의 댓글