Python boto,在存储桶中列出特定目录的内容

马丁·塔列斯基(Martin Taleski):

我只能通过S3访问S3存储桶中的特定目录。

例如,s3cmd如果我尝试列出整个存储桶,请使用命令:

    $ s3cmd ls s3://bucket-name

我收到一个错误: Access to bucket 'my-bucket-url' was denied

但是,如果我尝试访问存储桶中的特定目录,则可以看到以下内容:

    $ s3cmd ls s3://bucket-name/dir-in-bucket

现在,我想使用python boto连接到S3存储桶。与以下内容相似:

    bucket = conn.get_bucket('bucket-name')

我收到一个错误: boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

但是,如果我尝试:

    bucket = conn.get_bucket('bucket-name/dir-in-bucket')

脚本停顿大约10秒钟,然后打印出错误。波纹管是完整的痕迹。任何想法如何进行呢?

注意问题是关于boto版本2模块,而不是boto3。

Traceback (most recent call last):
  File "test_s3.py", line 7, in <module>
    bucket = conn.get_bucket('bucket-name/dir-name')
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 471, in get_bucket
    return self.head_bucket(bucket_name, headers=headers)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 490, in head_bucket
    response = self.make_request('HEAD', bucket_name, headers=headers)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 633, in make_request
    retry_handler=retry_handler
  File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1046, in make_request
    retry_handler=retry_handler)
  File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 922, in _mexe
    request.body, request.headers)
  File "/usr/lib/python2.7/httplib.py", line 958, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 992, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 954, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 814, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 776, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 1157, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known
装饰:

默认情况下,当您get_bucket在Boto中进行调用时,它会通过HEAD对存储桶URL 执行请求来尝试验证您是否实际上有权访问该存储桶。在这种情况下,您不希望boto那样做,因为您无权访问存储桶本身。因此,请执行以下操作:

bucket = conn.get_bucket('my-bucket-url', validate=False)

然后您应该能够执行以下操作以列出对象:

for key in bucket.list(prefix='dir-in-bucket'): 
    <do something>

如果仍然收到403 Errror,请尝试在前缀末尾添加斜杠。

for key in bucket.list(prefix='dir-in-bucket/'): 
    <do something>

注意:此答案是关于boto版本2模块的,该模块现在已过时。目前(2020年),boto3是用于AWS的标准模块。有关更多信息,请参阅此问题:AWS boto和boto3有什么区别

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

列出使用Python和Boto3的S3存储桶的目录内容吗?

使用boto3和python从S3存储桶目录中仅读取特定格式的文件

使用 python boto 仅下载 S3 存储桶中的特定文件夹

如何在Python中列出目录的内容?

如何在Python中从Google Storage列出存储桶?

在Python中的特定路径中列出目录

通过 Python 列出 GCP 存储桶位置

Lambda Python boto3将文件存储在S3存储桶中

如何使用Python列出Azure云存储中特定子目录内的所有Blob?

在 Python (Boto3) 中打开 S3 存储桶中的 .docx 文件

使用boto3,Python从S3存储桶中查找最新的CSV文件

如何使用Python访问boto存储桶中文件夹中的文件?

gcsfuse在GKE和/或python3 boto中安装存储桶以进行流写入?

列出带有boto3的存储桶的内容

Python3列出特定目录中的文件

Python-在存储桶中列出文件和文件夹

使用 Python 列出 IBM COS S3 存储桶中的所有键

在Python中的Google Cloud Platform存储桶中遍历目录树

如何使用python从S3存储桶中读取.txt文件并查看内容?

Google Cloud SDK Python客户端:如何在Cloud Storage存储桶中列出文件?

尝试使用Python列出IBM Cloud Object Storage中的对象时,“指定的存储桶不存在”

在Python中使用Boto将内容从s3存储桶的一条路径递归复制到另一条路径

AWS Datapipeline:在ShellCommandActivity中列出输出存储桶的内容

使用 boto3 和 python 列出 s3 存儲桶

如何在python中列出包含特定模式文件的文件夹/目录?

Sublime Text 3中的Python:oslist目录;仅列出特定的扩展名

如何使用pyspark和boto3检查S3存储桶中是否存在特定目录

如何仅列出Python中的顶级目录?

在python中列出目录树结构?