Ну, я читал и искал много тем о том, что вы спрашиваете, но не повезло. Итак, мне пришлось написать свою собственную лямбда-функцию.
Следующий фрагмент кода выполняет итерацию по всем папкам, а затем итерацию по подпапкам, проверяет, соответствует ли имя подпапки == Audit, если она сортируется по последнему измененному, и печатаетсамый новый объект.
Имейте в виду, что этот код соответствует только вашей структуре! поскольку функция list_folders
возвращает только первые подпапки.
В случае, если ваша структура изменилась на что-то подобное:
bucket/tableName1/Audit/Audit1/audit.json
Лямбда не будет работать.
Фрагмент кода:
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, bucket_name,'')
for folder in folder_list:
#get all subfolders
subfolders = list_folders(s3_client, bucket_name,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))
Проверено на следующих файлах: ![enter image description here](https://i.stack.imgur.com/UQb9y.png)
Table2
подпапка с именем Archive
. ![enter image description here](https://i.stack.imgur.com/mWe2H.png)
![enter image description here](https://i.stack.imgur.com/TRbVN.png)
Выход:
![enter image description here](https://i.stack.imgur.com/QDRvl.png)
Надеюсь, вы найдете это полезным.