반응형
s3에서 로컬 다운로드없이 파일을 읽으려고한다.
s3가 아니더라도, bytes 형태를 이미지로 바꿔보자
귀여운 고양이사진이다.
s3에 이 사진이 있다고 가정하고, bytes로 읽어보자.
boto3가 설치되어있다는 가정 하에 진행하면,
우선 s3에 접속해야한다.
s3 = boto3.resource(aws_access_key_id = 'YOUR_KEY',
aws_secret_access_key = 'YOUR_SECRET_KEY',
#endpoint_url='https://kr.object.ncloudstorage.com',
#정말 만약에 ncp를 사용하고있다면, 위의 주석을 해제하자
service_name = 's3')
bucket = s3.Bucket('your_bucket')
제대로 입력했다면 에러없이 정상적으로 진행 될 것이다.
s3 버킷 내에 있는 오브젝트를 확인하고싶다면,
다음과 같이 코드를 작성하자.
obj = bucket.objects.filter(Prefix = Your_Keyword)
file_list = []
for i in obj:
if i.endswith('/'):
continue
file_list.append(i.key)
파일들이 file_list에 담기게된다.
이제 이 파일을 메모리로 읽어보자.
import io
file = io.BytesIO()
bucket_obj = bucket.Object(file_name)
bucket_obj.download_fileobj(file)
file 변수 안에 s3 오브젝트를 다운로드했다.
만약 s3가 아닌 로컬에 있는 사진을 bytes로 읽으려면
with open('cat.png','r') as f:
file = f.read()
로 간단하게 읽을 수 있다.
1. cv2
import cv2
import numpy as np
file.seek(0)
img_file = np.fromstring(file.read(),np.uint8)
img = cv2.imdecode(img_file,cv2.IMREAD_COLOR)
2. PIL
from PIL import Image
file.seek()
pil_image = Image.open(file)
cv2는 numpy형태로 저장되고, PIL은 pil_image.show() 명령어를 통해 이미지 출력이 가능하니
목적에 맞게 사용하자.
반응형
'python > 기초' 카테고리의 다른 글
[파이썬 기초] if ~ else (0) | 2021.11.23 |
---|---|
[파이썬 기초] Class / 함수 (args,kwargs) (2) | 2021.10.13 |
[파이썬 기초] try ~ except문 (0) | 2021.09.07 |
[파이썬 기초] 반복문 - enumerate, zip (0) | 2021.09.07 |
[파이썬 기초] 리스트 컴프리헨션 (0) | 2021.08.17 |