[python] file - shutil.move

2392 단어 shutilpythonpython

shutil.move(src, dest, copy_function=copy2)

  • src에 해당하는 file or directory를 dest로 옮기고, 대상을 반환한다.

  • 기본적으로 copy_function은 copy2()로 지정되어 있지만, copy()와 같이 다른 함수를 넣을 수도 있다.
    copy2는 파일의 메타데이터도 함께 복사해준다. 하지만 이 과정에서 복사에 실패하는 파일이 생길 수도 있다.
    copy는 파일의 메타데이터를 복사해주지 않는다. 대신, 메타데이터 복사에 드는 비용을 절약하여, copy2에서는 복사 실패하는 파일들이 성공할 수 있다.

  • src가 directory이면, copy_function으로 copytree()가 호출된다.

1. move의 동작

: src를 dest로 복사 > src를 제거 > dest를 반환

# 예제
# test.py가 'test' directory 아래에 test2.py라는 이름으로 저장될 수 있도록 파일을 옮겨라. 
src = 'test.py'
dest = './test/test2.py'
print(shutil.move(src, dest)) # ./test/test2.py

※ 알아두기
: dest가 directory일 경우, 해당 directory는 파일 시스템 내에 이미 존재하고 있어야 한다.
그렇지 않을 경우, FileNotFoundError가 발생한다.


2. src가 file인 경우

1) dest가 file

  • 동일한 이름의 file이 이미 존재하면 os.rename()이 사용되어 덮어쓰기가 수행된다.
  • 동일한 이름의 file이 존재하지 않으면, copy_function을 그대로 사용해서 src를 dest에 copy한 후, src를 제거한다.

2) dest가 directory

  • dest가 이미 존재하는 directory이면, src는 해당 directory 내부로 이동한다.
  • dest가 존재하지 않는 directory이면, FileNotFoundError가 발생한다.

3. src가 directory인 경우 - dest도 directory

1) dest로 지정한 directory가 이미 존재하는 경우

  • src directory가 dest directory의 아래로 이동한다.

2) dest로 지정한 directory가 존재하지 않는 경우

  • directory의 이름이 변경된다.

※ 알아두기
shutil('./p1/', './p1/')
: src directory와 dest directory가 같은 경우, 아무 일도 일어나지 않고 None을 출력한다.



다른 shutil 모듈 보기

좋은 웹페이지 즐겨찾기