คำชี้แจงปัญหา − ใช้ไลบรารี boto3 ใน Python เพื่อรับรายการไฟล์จาก S3 ซึ่งจะถูกแก้ไขหลังจากประทับวันที่ที่กำหนด
ตัวอย่าง − แสดงรายการ test.zip จาก Bucket_1/testfolder ของ S3 หากมีการแก้ไขหลังปี 2021-01-21 13:19:56.986445+00:00
แนวทาง/อัลกอริทึมในการแก้ปัญหานี้
ขั้นตอนที่ 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 ถูกส่งผ่านในรูปแบบ AWS เป็น s3://bucket_name/key
ขั้นตอนที่ 4 − สร้างเซสชัน AWS โดยใช้ไลบรารี boto3
ขั้นตอนที่ 5 − สร้างทรัพยากร AWS สำหรับ S3
ขั้นตอนที่ 6 - ตอนนี้แสดงรายการวัตถุทั้งหมดของคำนำหน้าที่กำหนดโดยใช้ฟังก์ชัน list_objects และจัดการข้อยกเว้น หากมี
ขั้นตอนที่ 7 − ผลลัพธ์ของฟังก์ชันข้างต้นคือพจนานุกรมและประกอบด้วยข้อมูลระดับไฟล์ทั้งหมดในคีย์ที่ชื่อว่า "เนื้อหา" ตอนนี้แยกรายละเอียดระดับที่เก็บข้อมูลในวัตถุ
ขั้นตอนที่ 8 − ตอนนี้ object ยังเป็นพจนานุกรมที่มีรายละเอียดทั้งหมดของไฟล์อีกด้วย ตอนนี้ ดึงข้อมูล 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 []