【问题标题】:How to retrieve file names from S3 bucket and all of the subfolders如何从 S3 存储桶和所有子文件夹中检索文件名
【发布时间】:2021-01-15 17:49:12
【问题描述】:

我正在尝试从我的 s3 存储桶中检索所有文件名。但我不需要所有内容,只需要存储桶中某些位置的文件名。这样做有困难。我正在尝试使用 Boto3.Resource 但运气不佳。我能够连接到存储桶并检索存储桶的所有名称。但是当涉及到子文件夹时,就会遇到问题。

这是我的代码:

 import boto3

s3 = boto3.resource(
     service_name = 's3',
     region_name = 'us-west-1',
     aws_access_key_id = 'XXXXXXXXXXXXX',
     aws_secret_access_key = 'YYYYYYYYYYYYYYY')

 for x in s3.buckets.all():
    print(x)
 # I am able to list the names of the buckets.

 # loop through all buckets
 for x in s3.buckets.all():
     # make sure this is my bucket.
     if x == 'my-data-bucket':
       objs = list(x.objects.filter(Delimiter = '', Prefix='my-data-bucket/helpdesk/production/docs/'))
         for i in range(0, len(objs)):
             print(objs[i].key)
             # print all the file names.

请记住,“docs”子文件夹还有其他子文件夹,例如 001、002、003 ... 等,每个文件夹也有文档

目标是在类似这种格式的csv文件中列出所有文件名

      /my-data-bucket
         /helpdesk/production/docs/001/x.pdf
         /helpdesk/production/docs/001/zz.pdf
         /helpdesk/production/docs/002/aa.pdf
         /helpdesk/production/docs/003/rr.pdf
          etc .....

【问题讨论】:

  • 您无法使用列表对象 API 对其进行更多过滤。为什么不直接获取所需前缀中所有对象的列表,然后在 python 中过滤它们?
  • 含义:objs = list(s3.Bucket(my-data-bucket).objects.all()) - 像这样将所有内容添加到列表中,但是您将如何过滤它们观点?谢谢
  • 您可以使用 listobjectsv2 客户端调用(boto3.amazonaws.com/v1/documentation/api/latest/reference/…) 来获取所有对象并指定前缀。这将返回所有对象的列表。现在遍历此列表并将您需要的项目添加到新的过滤列表中。
  • 桶中有多少个对象?您多久需要一次此列表?我问是因为使用Amazon S3 Inventory 可能更容易,它可以提供列出所有对象的每日或每周 CSV 文件。
  • 存储桶中的对象超过 1000 个,并且会不断增长。多久...每天...

标签: python amazon-web-services csv amazon-s3 boto3


【解决方案1】:

我如何解决这个问题,我能够将所有对象放在一个列表中,如下所示:

all_objects = list(s3.Bucket('Bucket_Name').objects.all())

looped through all objects:
     for x in all_objects:
        # appended all objects to different list

create a dictionary of lists like dict = {'x': list1, 'y': list2, ....}
created a dataframe (df = pd.DataFrame(dict))

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2020-04-01
    • 2015-05-20
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多