문제 설명 − Python에서 boto3 라이브러리를 사용하여 S3에서 파일 목록을 가져옵니다. 이러한 파일은 지정된 날짜 타임스탬프 이후에 수정됩니다.
예 − 2021-01-21 13:19:56.986445+00:00 이후에 수정된 경우 S3의 Bucket_1/testfolder에서 test.zip을 나열합니다.
이 문제를 해결하기 위한 접근 방식/알고리즘
1단계 − boto3 및 botocore 예외를 가져와 예외를 처리합니다.
2단계 - s3_path 및 last_modified_timestamp list_all_objects_based_on_last_modified 함수의 두 매개변수입니다. "last_modified_timestamp" 형식은 "2021-01-22 13:19:56.986445+00:00"이어야 합니다. 기본적으로 boto3는 지리적 위치에 관계없이 UTC 시간대를 이해합니다.
3단계 − s3_path가 s3://bucket_name/key와 같은 AWS 형식으로 전달되었는지 확인합니다.
4단계 − boto3 라이브러리를 사용하여 AWS 세션을 생성합니다.
5단계 − S3용 AWS 리소스를 생성합니다.
6단계 − 이제 list_objects 함수를 사용하여 주어진 접두사의 모든 객체를 나열하고 예외가 있는 경우 예외를 처리합니다.
7단계 − 위 함수의 결과는 사전이며 'Contents'라는 이름의 키에 모든 파일 수준 정보를 포함합니다. 이제 객체에서 버킷 수준 세부정보를 추출합니다.
8단계 − 이제 객체는 파일의 모든 세부 사항을 포함하는 사전이기도 합니다. 이제 LastModified 를 가져옵니다. 각 파일의 세부 정보를 제공하고 주어진 날짜 타임스탬프와 비교합니다.
9단계 − LastModified인 경우 지정된 타임스탬프보다 크면 전체 파일 이름을 저장하고, 그렇지 않으면 무시합니다.
10단계 − 주어진 날짜 타임스탬프 이후에 수정된 파일 목록을 반환합니다.
예시
다음 코드는 마지막으로 수정된 날짜 타임스탬프를 기반으로 AWS S3에서 파일 목록을 가져옵니다. −
import boto3 from botocore.exceptions import ClientError def list_all_objects_based_on_last_modified(s3_files_path, last_modified_timestamp): if 's3://' not in s3_files_path: raise Exception('Given path is not a valid s3 path.') session = boto3.session.Session() s3_resource = session.resource('s3') bucket_token = s3_files_path.split('/') bucket = bucket_token[2] folder_path = bucket_token[3:] prefix = "" for path in folder_path: prefix = prefix + path + '/' try: result = s3_resource.meta.client.list_objects(Bucket=bucket, Prefix=prefix) except ClientError as e: raise Exception( "boto3 client error in list_all_objects_based_on_last_modified function: " + e.__str__()) except Exception as e: raise Exception( "Unexpected error in list_all_objects_based_on_last_modified function of s3 helper: " + e.__str__()) filtered_file_names = [] for obj in result['Contents']: if str(obj["LastModified"]) >= str(last_modified_timestamp): full_s3_file = "s3://" + bucket + "/" + obj["Key"] filtered_file_names.append(full_s3_file) return filtered_file_names #give a timestamp to fetch test.zip print(list_all_objects_based_on_last_modified("s3://Bucket_1/testfolder" , "2021-01-21 13:19:56.986445+00:00")) #give a timestamp no file is modified after that print(list_all_objects_based_on_last_modified("s3://Bucket_1/testfolder" , "2021-01-21 13:19:56.986445+00:00"))
출력
#give a timestamp to fetch test.zip [s3://Bucket_1/testfolder/test.zip] #give a timestamp no file is modified after that []