Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Boto 3로 AWS S3 객체 다운로드하는 방법

이 글에서는 Python과 Boto 3 라이브러리를 사용하여 AWS S3 버킷에서 파일과 이미지를 다운로드하는 방법을 실제 예제 코드와 함께 소개합니다.

Boto는 Python용 공식 AWS SDK입니다. EC2, S3 버킷 등 다양한 AWS 서비스와 손쉽게 상호작용할 수 있는 직관적인 함수들을 제공합니다.

Python과 Boto 3로 S3 객체 하나 다운로드하기

다음 예제는 지정된 S3 버킷에서 단일 파일을 다운로드하는 방법을 보여줍니다.

먼저 boto3.client('s3')를 호출하여 S3 클라이언트 객체를 생성해야 합니다.

import boto3

BUCKET_NAME = 'my_s3_bucket'
BUCKET_FILE_NAME = 'my_file.json'
LOCAL_FILE_NAME = 'downloaded.json'

def download_s3_file():
    s3 = boto3.client('s3')
    s3.download_file(BUCKET_NAME, BUCKET_FILE_NAME, LOCAL_FILE_NAME)

download_file 메서드는 세 가지 매개변수를 받습니다.

  • 첫 번째 매개변수: S3 버킷 이름
  • 두 번째 매개변수: 다운로드할 파일의 이름(확장자 포함)
  • 세 번째 매개변수: 로컬에 저장할 파일 이름

S3 버킷의 모든 객체 다운로드하기

다음 예제는 지정된 S3 버킷에 있는 모든 객체를 한 번에 다운로드하는 방법입니다.

아래 코드는 파일들이 버킷의 최상위(root) 경로에 바로 존재하고, 하위 폴더에는 없다고 가정합니다.

import boto3

def download_all_files():
    # s3 리소스 초기화
    s3 = boto3.resource('s3')
    # 버킷 선택
    my_bucket = s3.Bucket('bucket_name')
    # 현재 디렉터리에 파일 다운로드
    for s3_object in my_bucket.objects.all():
        filename = s3_object.key
        my_bucket.download_file(s3_object.key, filename)

S3 버킷 하위 폴더의 모든 객체 다운로드하기

다음 코드는 S3 버킷 내 특정 하위 폴더에 있는 파일들을 다운로드하는 방법을 보여줍니다.

예를 들어 파일이 아래와 같은 버킷과 경로에 있다고 가정해 보겠습니다.

BUCKET_NAME = 'images'

PATH = pets/cats/

import boto3
import os

def download_all_objects_in_folder():
    s3_resource = boto3.resource('s3')
    my_bucket = s3_resource.Bucket('images')
    objects = my_bucket.objects.filter(Prefix='pets/cats/')
    for obj in objects:
        path, filename = os.path.split(obj.key)
        my_bucket.download_file(obj.key, filename)

핵심은 objects.filter(Prefix=...)를 사용하여 원하는 폴더 경로의 객체만 필터링하는 것입니다. 이후 os.path.split()으로 전체 키(key)에서 파일 이름만 분리한 뒤 로컬에 저장합니다.

참고 자료

Boto 3 공식 문서(Boto 3 Documentation)