【问题标题】:How to Access AWS S3 Bucket in Python using boto3 [closed]如何使用 boto3 在 Python 中访问 AWS S3 存储桶 [关闭]
【发布时间】:2021-09-03 10:39:27
【问题描述】:

我是一名刚入门的数据工程专业学生。下面是一个公共 S3 数据集的链接,该数据集包含存档和实时天气雷达报告。

https://registry.opendata.aws/noaa-nexrad/

我能够使用 Python 中的 nexradaws 模块轻松访问存档数据。但是,我无法在 Python 中访问实时数据集,因为它不在 nexradaws 模块中提供。

我阅读了一些与此相关的 stackoverflow 帖子,并找到了一些不同的方法:

  1. 使用 boto3 包 - 我试过这个,但 boto3 文档似乎专注于在 Python 中创建存储桶。然后,使用访问密钥和密钥访问这些存储桶。但是,此存储桶不需要凭据即可访问。不确定在我的情况下实现 boto3 的正确方法是什么。此外,我浏览了官方 boto3 文档,但无法找到有关如何访问不需要访问密钥的公共存储桶的信息。但是,为了以防万一,我确实设置了一个 AWS 账户,并在创建存储桶时尝试使用 ARN,但是创建的存储桶仍然是空的。
  2. 在 Python 中使用 subprocess 模块并运行 AWS CLI - 我也在尝试此方法,但无法找到在 subprocess 模块中实施 AWS CLI 的正确方法。
  3. 使用出色的 sh Python 包 - 试试这个,我遇到了与上述相同的问题。

我的问题是,如何使用 boto3 访问实时数据?以及如何下载数据? boto3 的好资源在哪里?

【问题讨论】:

标签: python amazon-s3 sh boto3 aws-cli


【解决方案1】:

boto3:

import boto3
from botocore import UNSIGNED
from botocore.client import Config

s3 = boto3.resource("s3", config=Config(signature_version=UNSIGNED))
bucket = s3.Bucket("noaa-nexrad-level2")

for obj in bucket.objects.filter(Prefix="2021/01/01"):
    print(obj)

【讨论】:

  • 谢谢。但是到实际存储桶的链接会去哪里?
  • 它已经存在,在s3.Bucket("noaa-nexrad-level2") 下。这就是 NEXRAD II 级存档数据。
  • 我明白了。这实际上是我已经使用 nexradaws 模块访问过的存档数据。我将其更改为“unidata-nexrad-level2-chunks”,但现在我不确定如何过滤它,因为 objects.filter() 不使用此存储桶返回任何内容。
  • 刚试过unidata-nexrad-level2-chunks,我个人看到了结果。确保删除Prefix="...",因为这是您的过滤参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多