프로그래밍/Python

[Python] 파일 복사(copy)

채윤아빠 2022. 7. 4. 09:07
728x90
반응형

개요

파일을 복사(Copy)하는 방법에 대하여 정리해 둡니다.

파일을 복사하기 위해서 shutil 패키지의 copy(), copyfile(), copy2() 함수들을 이용합니다.


shutil.copy(src, dst)

기본적으로 "src" 원본 파일을 "dst" 대상 파일로 복사합니다.

"dst" 대상 파일의 생성 시각은 현재 시각으로 설정됩니다.

"dst"에 폴더명을 입력한 경우, 해당 폴더로 파일을 복사합니다.

Linux 계열에서는 파일의 권한 모드(chmod 참조)를 복사하지만, 파일의 생성과 수정 시간과 같은 다른 메타 데이터는 복사되지 않습니다. 메타데이터까지 복사하려는 경우에는 shutil.copy2() 함수를 이용해야 합니다.


shutil.copyfile(src, dst)

기본적으로 "src" 원본 파일을 "dst" 대상 파일로 복사합니다. "dst" 대상 파일의 생성 시각은 현재 시각으로 설정됩니다.

"dst"는 파일 이름이어야 합니다. 폴더명을 입력한 경우에는 "IOError: [Errno 21] Is a directory:" 오류가 발생합니다. (주의: shutil.copy() 함수와 다릅니다.)

그리고 "dst" 파일이 이미 존재하면, "src" 파일로 교체됩니다.

문자나 블록 장치 및 파이프와 같은 특수 파일은 이 함수로 복사할 수 없습니다.

"src"와 "dst"에 같은 파일을 지정하면, SameFileError가 발생합니다.


shutil.copy2(src, dst)

copy2() 함수는 shutil.copy() 함수와 기능이 동일하고, 추가로 파일의 생성과 수정 시간과 같은 다른 메타 데이터까지 복사됩니다.


파일 복사 예제

다음은 앞에서 살펴본 copy(), copy_file(), copy2() 함수를 사용한 예제입니다.

import shutil

src_file = 'file_copy.py'
dst_file = 'file_copy_copyed.py'

shutil.copy(src_file, dst_file)

shutil.copy(src_file, '/home/pi/')

dst_file2 = 'file_copy_file_copyed.py'
shutil.copyfile(src_file, dst_file2)

# shutil.copyfile(src_file, '/home/pi/') # IOError: [Errno 21] Is a directory:

dst_file3 = 'file_copy_copyed2.py'
shutil.copy2(src_file, dst_file3)

위 소스를 "file_copy.py" 이름으로 저장하고 실행한 결과는 다음과 같습니다.

pi@raspberrypi:~/Downloads $ python file_copy.py && ll
total 16K
-rw-rw-r-- 1 pi pi 255 Sep 27 19:09 file_copy_copyed2.py
-rw-rw-r-- 1 pi pi 255 Sep 27 21:41 file_copy_copyed.py
-rw-r--r-- 1 pi pi 255 Sep 27 21:41 file_copy_file_copyed.py
-rw-rw-r-- 1 pi pi 255 Sep 27 19:09 file_copy.py

참고자료