好吧,我一直在阅读和搜索很多有关您所要询问的主题的文章,但是没有运气。因此,我不得不编写自己的lambda函数。
下面的代码片段遍历所有文件夹,然后遍历子文件夹,检查子文件夹名称是否==审核,是否按上次修改排序并打印最新对象。
请注意,此代码仅适合您的结构!因为list_folders
函数仅返回第一个子文件夹。
如果您的结构更改为类似的内容:
bucket/tableName1/Audit/Audit1/audit.json
lambda不起作用。
代码段:
import boto3
#bucket Name
bucket_name = 'Bucket Name'
#bucket Resource
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
#bucket client
s3_client = boto3.client("s3")
#filter pattern
get_last_modified = lambda obj: int(obj.last_modified.strftime('%s'))
#get subfolder - 1 LEVEL ONLY !
def list_folders(s3_client,bucket_name,prefix):
response = s3_client.list_objects_v2(Bucket=bucket_name,Prefix=prefix,Delimiter='/')
for content in response.get('CommonPrefixes',[]):
yield content.get('Prefix')
def lambda_handler(event,context):
#get all folders
folder_list = list_folders(s3_client,'')
for folder in folder_list:
#get all subfolders
subfolders = list_folders(s3_client,folder)
for subfolder in subfolders:
#iterate over subfolders and check if subfolder name equal to Audit
if 'Audit' == subfolder.split('/')[1]:
#get all objects under subfolder
objs = [obj for obj in bucket.objects.filter(Prefix= subfolder)]
#sort by last modified by filter pattern and get the first object
last_modified_file = [obj for obj in sorted(objs,key=get_last_modified)][-1]
#print results
print('Last modified file Name: %s ---- Date: %s' % (last_modified_file.key,last_modified_file.last_modified))
针对以下文件进行了测试:
Table2
子文件夹,名为Archive
。
输出:
希望您会发现它很有帮助。
本文链接:https://www.f2er.com/3156405.html