在每个 s3 存储桶中搜索并查看给定文件夹是否存在

我正在尝试从 s3 Buckets 中的特定文件夹中获取文件:


我在 s3 中有 4 个桶,名称如下:


1 - 'PDF'

2 - 'TXT'

3 - 'PNG'

4 - 'JPG'

所有 s3 存储桶的文件夹结构如下所示:


1- PDF/analysis/pdf-to-img/processed/files

2- TXT/report/processed/files

3- PNG/analysis/reports/png-to-txt/processed/files

4- JPG/jpg-to-txt/empty

我必须检查此文件夹前缀processed/files是否存在于存储桶中,如果存在,我将读取这些目录中存在的文件,否则我将忽略它们。


代码:


buckets = ['PDF','TXT','PNG','JPG']


client = boto3.client('s3')

for i in bucket:

    result = client.list_objects(Bucket=i,Prefix = 'processed/files', Delimiter='/')

    print(result)

如果文件夹结构相同,我可以进入每个目录,但是当每个存储桶的文件夹结构不同时,我该如何处理?


慕容708150
浏览 94回答 2
2回答

慕虎7371278

这也许是一个漫长的过程。 buckets = ['PDF','TXT','PNG','JPG']    s3_client = getclient('s3')    for i in buckets:        result = s3_client.list_objects(Bucket= i, Prefix='', Delimiter ='')        contents = result.get('Contents')        for content in contents:            if 'processed/files/' in content.get('Key'):                print("Do the process")您可以从 s3 存储桶中获取目录列表。如果它包含所需的文件夹,请执行所需的过程。

Qyouu

import boto3client = boto3.client('s3')bucket_name = "bucket_name"prefix = ""s3 = boto3.client("s3")result = client.list_objects(Bucket=bucket_name, Delimiter='/')   for obj in result.get('CommonPrefixes'):         prefix = obj.get('Prefix')       file_list = ListFiles(client,bucket_name,prefix)       for file in file_list:          if "processed/files" in file:              print("Found",file)def ListFiles(client, bucket_name, prefix):    _BUCKET_NAME = bucket_name    _PREFIX = prefix    """List files in specific S3 URL"""    response = client.list_objects(Bucket=_BUCKET_NAME, Prefix=_PREFIX)    for content in response.get('Contents', []):        #print(content)        yield content.get('Key')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python