개요
파일을 복사(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
참고자료
- "shutil — 고수준 파일 연산":https://docs.python.org/ko/3/library/shutil.html
'프로그래밍 > Python' 카테고리의 다른 글
[python] NumPy에서 2차원 배열에서 각 열의 평균을 구하는 방법 (0) | 2022.10.08 |
---|---|
[Python] struct.pack() 함수 이용시 패팅 주의하기 (0) | 2022.07.29 |
[Python] 프로세스간 데이터 공유 : Array (0) | 2022.06.16 |
[Python] CCPD 예제 동작 확인 (0) | 2022.06.05 |
[Python] Windows 10에 OpenVino 개발환경 만들기 (0) | 2022.06.03 |