[파이썬] shutil에서 버퍼 크기 조정하기

파이썬의 shutil 모듈은 파일 및 디렉토리 작업을 수행하는 데 유용한 함수를 제공합니다. 이 모듈을 사용하면 파일 및 디렉토리를 복사, 이동, 이름 변경 등의 작업을 간단하게 처리할 수 있습니다. 하지만 때로는 파일을 복사하거나 이동할 때 버퍼 크기를 조정하여 성능을 향상시켜야 할 수도 있습니다.

버퍼 크기는 한 번에 처리할 데이터 양을 결정하는 요소로, 작업의 속도에 큰 영향을 줄 수 있습니다. 따라서 shutil 모듈의 함수를 호출할 때 적절한 버퍼 크기를 지정하는 것이 중요합니다.

shutil.copy() 함수와 버퍼 크기

shutil 모듈의 copy() 함수를 사용하면 원본 파일을 대상 위치로 복사할 수 있습니다. 이 함수는 내부적으로 기본 버퍼 크기인 16KB를 사용하여 파일을 복사합니다. 하지만 이 버퍼 크기를 늘리거나 줄여 성능을 최적화할 수 있습니다.

다음은 shutil.copy() 함수를 호출하여 버퍼 크기를 조정하는 예제 코드입니다.

import shutil

def copy_file_with_buffer_size(source, destination, buffer_size):
    # 버퍼 크기를 조정하기 위해 copyfileobj() 함수를 사용합니다.
    # source 파일을 read 모드로 오픈하고 destination 파일을 write 모드로 오픈한 뒤 버퍼 크기를 설정합니다.
    with open(source, 'rb') as src_file, open(destination, 'wb') as dst_file:
        shutil.copyfileobj(src_file, dst_file, buffer_size)

위의 코드에서 copy_file_with_buffer_size() 함수는 원본 파일과 대상 위치, 그리고 원하는 버퍼 크기를 인수로 받습니다. copyfileobj() 함수를 호출하여 원본 파일을 대상 위치로 복사하는데, 이때 buffer_size 매개변수를 이용하여 버퍼 크기를 설정합니다.

shutil.move() 함수와 버퍼 크기

shutil 모듈의 move() 함수는 파일이나 디렉토리를 다른 위치로 이동할 때 사용됩니다. move() 함수는 기본적으로 copy2() 함수를 사용하여 파일을 복사 성공적으로 완료한 후에 원본 파일을 삭제합니다. copy2() 함수도 copy() 함수와 마찬가지로 내부적으로 버퍼 크기를 사용합니다.

다음은 shutil.move() 함수를 호출하여 버퍼 크기를 조정하는 예제 코드입니다.

import shutil

def move_file_with_buffer_size(source, destination, buffer_size):
    # 버퍼 크기를 조정하기 위해 copy2() 함수를 사용합니다.
    # source 파일을 destination으로 복사한뒤 원본 파일은 삭제합니다.
    shutil.copy2(source, destination, buffer_size)
    os.remove(source)

move_file_with_buffer_size() 함수에서 copy2() 함수를 호출하여 버퍼 크기를 조정하고 원본 파일을 삭제합니다. 여기에서도 buffer_size 매개변수를 이용하여 버퍼 크기를 설정할 수 있습니다.

결론

shutil 모듈을 사용하여 파일 및 디렉토리 작업을 수행할 때, 버퍼 크기 조정을 통해 성능을 향상시킬 수 있습니다. shutil.copy() 함수와 shutil.move() 함수는 내부적으로 버퍼 크기를 사용하며, 이를 조정하는 방법을 알아보았습니다. 이러한 설정을 통해 더 빠른 파일 복사와 이동이 가능하게 됩니다.