[AWS S3] boto3를 활용한 S3 Directory with existing files 추출

olxtar·2023년 4월 11일
0
post-thumbnail

Comment :

S3 내 여러 폴더, 하위폴더, \dots 파일들로 이루어진 경로를 파악하는 과정에서 '파일'이 존재하는 경로들만 추출하고 싶음


먼저 Case부터 따져보면 아래와 같다.

  1. 해당 경로에 폴더들만 존재하는 경우
  2. 해당 경로에 폴더 + 파일이 존재하는 경우
  3. 해당 경로에 파일들만 존재하는 경우

S3 boto3의 list_objects_v2 & paginator의 한계상(?) 나올 수 있는 모든 경로들을 뱉어내므로 아래와 같은 함수를 생성함.
list_objects_v2 & paginator의 경우 위의 Case들은 아래와 같아진다.

  1. 해당 경로에 폴더들만 존재하는 경우 \rightarrow page 내 CommonPrefixes를 가지고 있다.
    [?] ContentsKey에 해당 경로만 가짐

  2. 해당 경로에 폴더 + 파일이 존재하는 경우 \rightarrow page 내 CommonPrefixes & Contents를 가지고 있다.
    [+] ContentsKey로 해당 경로 + 파일 경로들을 가짐

  3. 해당 경로에 파일들만 존재하는 경우 \rightarrow page 내 Contents만 가짐


1. 폴더만 존재(folder_w_folders)

CommonPrefixes에 하위폴더 경로가 있고, Contents에는 자기 자신의 경로만 있다.



2. 폴더 + 파일 존재 (folder_w_files_folders)

CommonPrefixes에 하위폴더 경로가 있고, Contents에는 자기 자신의 경로(List 0번째에 위치)와 하위파일 경로가 있다.



3. 파일만 존재 (folder_w_files)

CommonPrefixes가 존재하지 않고, Contents에는 자기 자신의 경로(List 0번째에 위치)와 하위파일 경로가 있다.


정리 :

list_objects_v2 & paginator에 입력한 경로(Prefix; 이 경로 밑에 무엇이 있는지 탐색해야되는) 하위에 폴더 or 파일이 존재 시 Response Dictionary의 Contents List의 Key로 입력경로 & 파일의 경로가 반환된다.

하위 폴더 경로에 대해서는 CommonPrefixesPrefix로 반환된다.

profile
예술과 기술

0개의 댓글