【问题标题】:Best way to iterate over S3 and download each file separately into python迭代 S3 并将每个文件分别下载到 python 的最佳方法
【发布时间】:2020-09-22 10:33:38
【问题描述】:

我在 S3 中有大量文件(约 150gb 的文本文件),文件夹结构相当简单。有许多文件夹,每个文件夹中有几个 Gb 的文件。我想使用 boto3 迭代 s3 的内容并下载每个文件,在 python 中对该文件进行操作(不需要重新上传/更改 s3 中的原始文件),然后继续下一个文件。困难的部分是存储桶中还有其他我想忽略的对象,例如存在的一些文件夹和 zip 文件。

我很幸运地列出了 s3 的内容,但我不知道如何在 python 中访问文件的名称

for object in s3.Bucket('name_of_bucket').objects.all():
    print(object)

打印对象会给出文件的名称,但我不知道如何在 python 中访问对象的内容。该对象是一个boto3.resources.factory.s3.ObjectSummary 对象。

我正在寻求有关如何使用此方法或完全不同的方法的帮助。

提前谢谢你

【问题讨论】:

  • s3.download_object(object.fpath) 或沿着这些线的东西
  • 谢谢,但没有解决上述问题
  • 你考虑过S3 batch。似乎很适合您的用例。

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


【解决方案1】:

就像print(object)一样,您可以通过object.key查看对象的名称,如果需要,可以通过object.download_file下载。

然后您可以访问本地磁盘上文件的内容。

虽然您可以使用object.get(),然后通过流式主体Body 响应访问内容,但最好从本地磁盘读取/操作文件。

所有函数都记录在:Boto3 Docs: S3 Object

【讨论】:

    【解决方案2】:

    使用 download_file 方法

    for obj in first_bucket.objects.all():
         subsrc = obj.Object()
         print(obj.key)  # gives file name
         obj.download_file(f'/tmp/{obj.key}')   # download file
    

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      相关资源
      最近更新 更多