파이썬 shutil 라이브러리에는 파일/폴더 복사와 관련된 여러 함수가 있다.
copy, copy2, copyfile, copytree
(copy2 라니.. 공식 라이브러리인데 너무 대충 만든거 아닌지ㅋㅋㅋ)
각각의 기능을 살펴보면
함수명 | 기능 | 사용방법 |
copy | 파일을 복사한다 | shutil.copy(src 파일 경로, dest 파일(or 폴더) 경로) * dest 에 폴더 경로를 지정할 경우 src 파일명과 같은 파일 생성 |
copy2 | 파일을 복사한다 | shutil.copy2(src 파일 경로, dest 파일(or 폴더) 경로) * dest 에 폴더 경로를 지정할 경우 src 파일명과 같은 파일 생성 |
copyfile | 파일을 복사한다 | shutil.copyfile(src 파일 경로, dest 파일 경로) |
copytree | 폴더를 통째로 복사한다 | shutil.copytree(src 폴더 경로, dest 폴더 경로) * dest 폴더 경로가 이미 존재하는 경우 에러 발생 |
언뜻 봐서는 copy, copy2, copyfile 이 왜 나뉘어 있는지 잘 모르겠어서
shutil 라이브러리 문서를 파보았다.
** copy, copy2, copyfile 의 차이점
함수명 | 기능 | 비고 | 공통점 |
copyfile | 파일 복사(copyfile) | 원본 파일(src) 과 대상 파일(dest) 이 같으면 에러 발생 | |
copy | 1) 파일 복사(copyfile) + 2) 파일 권한 복사(copymode) |
* 파일 권한 : 파일 읽기, 쓰기 등의 권한 (리눅스 chmod 개념) |
|
copy2 | 1) 파일 복사(copyfile) + 2) 파일 메타데이터 복사(copystat) |
* 파일 메타데이터 : 파일 권한, 최근 접근 날짜, 최근 수정한 날짜 등 |
copy 는 copyfile 을 하고 난 후 권한까지 복사하는 개념,
copy2 는 copyfile 을 하고 난 후 메타데이터까지 복사하는 개념이고
copyfile < copy < copy2
오른쪽으로 갈수록 포괄적인 개념이다.
위 내용을 참고해서 상황에 맞는 함수를 골라 사용하면 될 것 같다. :)
그런데 여기서 한 가지,
위 copy 관련 함수들은 원본파일(src) 이 존재하는지 따로 체크하는 로직이 없어 보였다.
즉, 존재하지 않는 파일을 복사하려 하면 에러가 날 것.
import os
import shutil
if os.path.exists(src):
# src 존재하면 True
shutil.copy(src, dst)
그래서 위 함수들을 사용할 때
이렇게 파일 존재 여부를 체크하는 조건문을 넣어주면 된다. :D
300x250
':: python' 카테고리의 다른 글
python :: 파이썬 텍스트 파일 내 특정 단어 치환(replace)하기 (3) | 2021.06.23 |
---|---|
python :: 파이썬 requests 로 REST API 호출하기 (2) | 2021.06.21 |
python :: 파이썬 파일 복사 shutil.copy 속도 빠르게 향상시키기 (4) | 2021.06.17 |
python :: 파이썬 zipfile 로 파일 압축하기(하위폴더 포함/미포함) & 압축 해제하기 (0) | 2021.06.15 |
python :: os.listdir과 os.walk (파이썬 특정 경로 내 디렉토리와 파일 검색) (0) | 2021.06.14 |