조이 생각

반응형

python 에서 AWS 데이터 스토리지인 S3에 접근하여

원하는 경로에 있는 파일 리스트를 읽어오는 방법입니다.

 

 

1. boto3 패키지 설치

우선 python 에서 aws s3에 접근하기 위해서는 boto3 패키지 설치를 해야합니다.

 

아래 명령어로 설치를 합니다.

pip install boto3

저의 boto3 버전은 1.17.111 입니다.

 

 

2. 기본 값 셋팅

가져올 S3 데이터의 버킷명, 접근 키, 비밀 키, 버킷 하위 경로 등을 셋팅합니다.

 

accessKey = '본인 aws 접근 키'
secretKey = '본인 aws 비밀 키' 
region = '리전 명'
bucket_name = '버킷 명'  
prefix = '라벨링된 데이터 경로'

 

 

3. S3 연결

이제 s3를 연결해줄 차례입니다.

 

import boto3

# s3 클라이언트 생성
s3 = boto3.client('s3', aws_access_key_id=accessKey, aws_secret_access_key=secretKey, region_name=region)
# 원하는 bucket 과 하위경로에 있는 object list
obj_list = s3.list_objects(Bucket=bucket_name, Prefix=prefix)  # dict type
# object list의 Contents를 가져옴
contents_list = obj_list['Contents']

# Content list 출력
for content in contents_list:
    print(content)

이렇게 contents에는 key를 포함한 object의 정보를 담고 있습니다.

 

 

4.  Key 리스트 생성

실제 파일명 key 값을 뽑아오겠습니다.

 

# 파일명 추출
file_list = []
for content in contents_list:
    key = content['Key']
    file_list.append(key)

# 파일명 출력
for file in file_list:
     print(file)

 

출력 결과를 보면, 파일이 없는 경로까지 포함되어 있는 것을 볼 수 있습니다.

그리고 여기에는 없지만, train/다른폴더/OOOO.xlsx

이런식으로 하위 모든 경로를 list object 는 다 들고오기 때문에

지정한 경로 하위에 있는 파일들로만 걸러주겠습니다.

 

file_list = []
for content in contents_list:
    key = content['Key']
    idx = key.rindex('/')  # 맨 마지막 '/' 인덱스
    # 파일 최종 경로가 prefix 거나, key 자체가 prefix 아닐 때 저장 
    if key[0:idx + 1] == prefix and key != prefix:
        file_list.append(key)
    print(key)  # 전체 key 출력
print('====================')
for file in file_list:
    print(file)  # 걸러낸 key 출력

 

출력 결과 입니다. 

prefix 경로로만 이루어진 것은 저장되지 않는 것을 확인할 수 있습니다.

 

 

엑셀파일 pandas로 읽는방법

 

[Amazon S3] python 에서 AWS S3 엑셀 데이터 Pandas Data Frame으로 읽어오기

AWS S3에 있는 엑셀데이터를 Pands의 Data Frame 형태로 읽어오겠습니다. 1. AWS S3 Client 생성 import boto3 accessKey = '본인 aws 접근 키' secretKey = '본인 aws 비밀 키' region = '리전 명' # s3 클라이언..

joytk.tistory.com

 

 

도움이 되셨다면 공감(하트) 부탁드립니다.

감사합니다. :)

 

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band
loading