Python 引用现有S3存储桶以使用Boto保存文件

Python 引用现有S3存储桶以使用Boto保存文件,python,amazon-s3,boto,Python,Amazon S3,Boto,下面我将介绍如何在创建文件后将其保存到S3存储桶中。但是,我找不到如何保存到现有存储桶的解释。更具体地说,我不确定如何引用先前存在的桶。我相信将create_bucket替换为get_bucket就可以了。这允许我保存文件,但因为文档中说,get_bucket“按名称检索bucket”,我想在这里检查一下,确保它只检索bucket的元数据,不会将bucket的所有内容下载到我的计算机上。我这样做是对的还是有一种更像蟒蛇的方式 import boto s3 = boto.connect_s3()

下面我将介绍如何在创建文件后将其保存到S3存储桶中。但是,我找不到如何保存到现有存储桶的解释。更具体地说,我不确定如何引用先前存在的桶。我相信将
create_bucket
替换为
get_bucket
就可以了。这允许我保存文件,但因为文档中说,
get_bucket
“按名称检索bucket”,我想在这里检查一下,确保它只检索bucket的元数据,不会将bucket的所有内容下载到我的计算机上。我这样做是对的还是有一种更像蟒蛇的方式

import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket')
from boto.s3.key import Key
k = Key(bucket)
k.key = 'foobar'
k.set_contents_from_string('This is a test of S3')

你的代码看起来很合理。
get_bucket
方法将返回一个
bucket
对象,或者,如果指定的bucket名称不存在,它将引发一个
S3ResponseError

您可以稍微简化代码:

import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket')
k = bucket.new_key('foobar')
k.set_contents_from_string('This is a test of S3')

但是它实现了同样的效果。

我最初尝试了您的解决方案,但我遇到了一个错误:有趣的是,当我运行您的代码时,我不再遇到错误。不知道发生了什么变化。你确定/你能证明返回的
Bucket
对象不包括Bucket中的实际文件吗?嗯,我编写了boto库。我可能应该知道好的,那么答案是什么?是否正在下载存储桶的内容?你从来没有明确地说。这不是下载水桶的内容。桶中可能有数百万甚至数十亿个对象。一旦你有了Bucket对象,你就可以通过为Bucket中的key执行
循环来遍历其中的所有对象:
循环,boto将自动为你处理数据分页。但即使在这里,您也只能获得关于对象的元数据,而不是对象本身。FWIW,在依赖S3/Boto之前,我可能会非常仔细地查看s3fs。如果您为s3fs编写代码,那么您的程序应该可以移植到任何支持POSIX文件系统API的地方。