반응형
Boto3를 사용해서 S3에서 폴더만 확인하려면 객체 키(Key)에 포함된 경로를 기준으로 중복되지 않는 "폴더" 이름을 추출해야 합니다. S3는 사실 계층적 파일 시스템이 아니지만, 키의 / 구분자를 사용해 폴더처럼 보이도록 관리합니다.
다음은 S3 버킷에서 폴더만 가져오는 Python 스크립트입니다:
import boto3
def list_s3_folders(bucket_name, prefix=""):
s3 = boto3.client('s3')
paginator = s3.get_paginator('list_objects_v2')
response_iterator = paginator.paginate(Bucket=bucket_name, Prefix=prefix, Delimiter='/')
folders = set()
for page in response_iterator:
# "CommonPrefixes"는 폴더 정보를 제공
if 'CommonPrefixes' in page:
for folder in page['CommonPrefixes']:
folders.add(folder['Prefix'])
return folders
# 사용법
bucket_name = "your-bucket-name"
prefix = "your/folder/path/" # 특정 폴더 내 확인 (전체 버킷 조회 시 공백)
folders = list_s3_folders(bucket_name, prefix)
# 결과 출력
print("폴더 목록:")
for folder in folders:
print(folder)
주요 포인트
- Delimiter="/":
- S3에서 /를 기준으로 폴더처럼 보이도록 데이터를 반환합니다.
- 반환된 결과에서 실제 객체 키가 아닌 "폴더"만 가져옵니다.
- CommonPrefixes:
- 폴더는 CommonPrefixes 키에 포함되어 있습니다.
- 중복 방지를 위해 set()을 사용해 저장.
- Prefix:
- your/folder/path/처럼 특정 경로를 지정하면 해당 경로 아래의 폴더만 확인 가능.
- 버킷 전체를 확인하려면 prefix=""로 설정.
출력 예시
버킷에 다음과 같은 키가 있다고 가정:
folder1/
folder1/subfolder1/
folder1/subfolder2/
folder2/
file1.txt
실행 결과:
폴더 목록:
folder1/
folder2/
prefix="folder1/"로 설정하면:
폴더 목록:
folder1/subfolder1/
folder1/subfolder2/
※ 이 게시글은 chatgpt-4o 의 도움을 받아 작성되었습니다.
반응형
'IT' 카테고리의 다른 글
[Python] 삼항 연산자의 예제, 사용법 (0) | 2024.11.22 |
---|---|
[Python] substring 의 정의와 예제, 사용법(feat. slicing) (0) | 2024.11.22 |
[Python] split() 함수의 정의와 예제 (1) | 2024.11.19 |
[AWS] S3 의 특정 단어가 포함된 객체 모두 삭제하는 방법(feat. list_objects_v2) (0) | 2024.11.19 |
[Jupyter notebook] Pyspark 와 python 함수를 혼합해서 사용하는 경우 발생하는 TypeError 해결 (1) | 2024.11.13 |