차밍이

[Python] 파일 옮기기 복사하기 - shutil 모듈 move copy 본문

파이썬/기본 문법 정리

[Python] 파일 옮기기 복사하기 - shutil 모듈 move copy

2023. 2. 6. 19:26
반응형

컴퓨터로 작업을 하다 보면 특정 폴더에서 파일을 옮기거나 복사하는 작업을 하는 경우가 있습니다.

단순하게 그냥 쓱 옮기면 편한데,
가끔은 날짜별로 정리를 하는 등의 조건에 따라 분류를 해줘야 하는 경우도 생기면 번거로워집니다.

게다가 파일의 수가 많아지면 더욱 힘들어 지는 것이죠.

이럴 때 파이썬을 사용하면 쉽고 편하게 파일을 분류할 수 있습니다.

그래서 오늘은 디렉토리의 파일들을 옮기거나 복사하기 위해 shutil 모듈을 사용해보겠습니다.

 

파일 옮기기 : file move

파일을 옮기기 위해서 shutil.move method를 사용하면 됩니다.
기존의 위치(src)에서 옮길 위치(dst)를 설정해 주면 됩니다.

 

shutil.move 예제 코드

import shutil
import os

filename = "temp.txt"
src = "E:\py_workspace\org_directory"
dst = "E:\py_workspace\new_directory"

shutil.move(os.path.join(src, filename), os.path.join(dst, filename))
# shutil.move(src + "/" + filename, dst + "/" + filename) 
# os.path.join 은 디렉토리 형태로 합쳐주는 method입니다. 위의 두 코드의 결과는 동일합니다.

 

파일 복사 : file copy

파일을 복사하기는 shutil.copy를 사용하면 됩니다.
move와 마찬가지로 기존의 위치 src에서 dst로 파일을 복사해 줍니다.

import shutil
import os

filename = "temp.txt"
src = "E:\py_workspace\org_directory"
dst = "E:\py_workspace\new_directory"

shutil.copy(os.path.join(src, filename), os.path.join(dst, filename))

 

조건에 따라 활용

특정 조건에 따라서 분류하는 방법에 대한 예시를 들어보겠습니다.

size 값에 따라서 폴더를 만들고 해당 폴더로 파일을 옮기는 것입니다.
size로 이루어진 폴더가 없으면 폴더를 만들고 만든 폴더 명은 set에 저장해 두었습니다.
그리고 해당 size를 가진 파일들은 size로 이루어진 폴더 안으로 move 하도록 하였습니다.

import shutil
import os

org_path = "E:\py_workspace\org_directory"
dst_path = "E:\py_workspace\new_directory"
files = os.listdir(org_path)

size_set = set()
for file in files:
    menu, size, side = file.split(",")
    if size not in size_list:
        size_set.add(size)
        os.mkdir(os.path.join(dst_path, size))
    
    src = os.path.join(org_path, file)
    dst = os.path.join(dst_path, size, file)
    shutil.move(src, dst)

이런 방식으로 파일을 원하는 조건에 맞춰 분류하고 이동할 수 있습니다.

 

오류 발생 경우

FileNotFoundError: [Errno 2] No such file or directory:

shutil move 또는 shutil copy를 할 때, 위와 같은 에러가 발생하는 경우가 종종 있습니다.
Error가 발생되는 경우는 다음과 같습니다.
1. 기존 위치의 파일이 없거나 경로가 잘못된 경우
2. 옮길 위치의 폴더가 없는 경우

위의 두 가지 경우가 있습니다.
특히나 2번과 같이 옮길 위치 directory 중 없는 폴더가 있으면
폴더가 생성되지 않고 오류가 발생하는 경우가 많으니 한 번 다시 확인해 보시면 해결할 수 있을 것입니다.

지금까지 Shutil 모듈을 사용해서 파일을 move or copy 하는 방법에 대해서 알아보았습니다.

반응형

관련된 글 보기

Comments