IT

[AWS] S3 폴더 구조 확인 코드(feat. python, boto3)

feelninefree 2024. 11. 22. 13:53
반응형

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)

 

주요 포인트

  1. Delimiter="/":
    • S3에서 /를 기준으로 폴더처럼 보이도록 데이터를 반환합니다.
    • 반환된 결과에서 실제 객체 키가 아닌 "폴더"만 가져옵니다.
  2. CommonPrefixes:
    • 폴더는 CommonPrefixes 키에 포함되어 있습니다.
    • 중복 방지를 위해 set()을 사용해 저장.
  3. Prefix:
    • your/folder/path/처럼 특정 경로를 지정하면 해당 경로 아래의 폴더만 확인 가능.
    • 버킷 전체를 확인하려면 prefix=""로 설정.

출력 예시

버킷에 다음과 같은 키가 있다고 가정:

folder1/
folder1/subfolder1/
folder1/subfolder2/
folder2/
file1.txt

 

실행 결과:

폴더 목록:
folder1/
folder2/

 

prefix="folder1/"로 설정하면:

폴더 목록:
folder1/subfolder1/
folder1/subfolder2/

 

 


 이 게시글은 chatgpt-4o 의 도움을 받아 작성되었습니다.

반응형