0

我在 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对象。

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

先感谢您

4

2 回答 2

2

就像print(object),您可以通过检查对象的名称object.key,如果需要,可以使用object.download_file.

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

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

所有功能都记录在:Boto3 Docs: S3 Object

于 2020-09-22T02:29:15.827 回答
1

使用 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
于 2020-09-22T02:33:38.697 回答