S3에서 파일은 많이 다운 받아 봤었다 하지만 디렉토리를 통으로 다운받아야 할 일이 생겨 boto3를 사용해서 그대로 다운받아 보려고 시도해보았는데
import boto3
s3 = boto3.client('s3')
s3.download_file('버킷이름', '경로', '로컬에서 다운받고 싶은 이름')
보통은 위와 같이 하면 되는데 ... 결과는 실패..
stackoverflow를 찾아본 결과 나와 같은 문제를 마주친 다른사람이 있었다.
https://stackoverflow.com/questions/49772151/download-a-folder-from-s3-using-boto3
import boto3
import os
def downloadDirectoryFroms3(bucketName, remoteDirectoryName):
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket(bucketName)
for obj in bucket.objects.filter(Prefix = remoteDirectoryName):
if not os.path.exists(os.path.dirname(obj.key)):
os.makedirs(os.path.dirname(obj.key))
bucket.download_file(obj.key, obj.key) # save to same path
하지만 해당 질문에 대한 답변으로 대부분 for문을 돌려서 노가다(?) 로 다운받는 형식이였다..
boto3를 사용해서 다운받는것 이외 다른 방법을 찾아보았다.
그래서 찾은 것이 cloudpathlib !!
1. 먼저 pip install cloudpathlib 를 통해 설치를 하자
2. 다음과 같이 소스코드 작성 해서 실행하자
from cloudpathlib import CloudPath
cp = CloudPath("S3 URL")
cp.download_to("로컬에 다운받을 위치")
(S3 URL 넣는 위치에는 빨간 동그라미 친 버튼을 눌러서 그대로 붙여넣기 해주면 된다.)
3. 결과
내가 지정한 디렉토리에 잘 다운받아지는 것을 확인했다
성공적이다!!
댓글