📜  从 s3 存储桶中获取数据 python (1)

📅  最后修改于: 2023-12-03 15:36:15.012000             🧑  作者: Mango

从 S3 存储桶中获取数据 Python

Amazon S3(Simple Storage Service)是亚马逊 Web 服务(AWS)提供的一种对象存储服务。S3 可以存储和检索任何数量的数据,且保证数据的可靠性和安全性。本文将介绍如何使用 Python 从 S3 存储桶中获取数据。

步骤一:安装依赖

使用 Python 获取 S3 存储桶中的数据需要安装 boto3 库。可以使用 pip 命令安装:

!pip install boto3

步骤二:获取 S3 访问凭证

在 Python 中连接 S3 存储桶需要一个有效的 AWS 访问密钥和秘密密钥。可以通过 AWS IAM(Identity and Access Management)服务来创建一个具有 S3 访问权限的用户,并获取访问凭证。

访问凭证包括以下三个参数:

  • aws_access_key_id:AWS 访问密钥ID
  • aws_secret_access_key:AWS 秘密访问密钥
  • aws_session_token(可选):AWS 会话令牌(当使用临时安全凭证时需要)

步骤三:连接 S3 存储桶

使用获取到的访问凭证连接 S3 存储桶。可以使用以下代码连接 S3:

import boto3

s3 = boto3.resource('s3',
                    aws_access_key_id=AWS_ACCESS_KEY_ID,
                    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                    aws_session_token=AWS_SESSION_TOKEN)

bucket = s3.Bucket('bucket-name')

其中,AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 AWS_SESSION_TOKEN 需要替换为实际的访问凭证参数。'bucket-name' 是要读取数据的 S3 存储桶的名称。使用 s3.Bucket() 方法可以实例化一个 S3 存储桶对象。

步骤四:获取 S3 存储桶中的对象

可以使用 Bucket.objects.all() 方法获取存储桶中的所有对象:

objects = bucket.objects.all()

遍历 objects 对象可以获取存储桶中的每个对象,可以使用以下代码获取某个对象的数据:

for obj in objects:
    body = obj.get()['Body'].read()
    print(body)

其中,obj.get() 方法返回一个包含对象数据的字典。'Body' 键包含文件的内容,可以使用 read() 方法读取并返回数据。

步骤五:使用文件对象获取数据

除了使用 get() 方法获取文件数据之外,也可以使用文件对象来获取数据:

obj = s3.Object('bucket-name', 'file-name')
body = obj.get()['Body'].read()

其中,'file-name' 是要获取的文件的名称。使用 s3.Object() 方法可以实例化一个 S3 存储桶中的对象。

完整代码片段如下:

import boto3

s3 = boto3.resource('s3',
                    aws_access_key_id=AWS_ACCESS_KEY_ID,
                    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                    aws_session_token=AWS_SESSION_TOKEN)

bucket = s3.Bucket('bucket-name')
objects = bucket.objects.all()

for obj in objects:
    body = obj.get()['Body'].read()
    print(body)
    
obj = s3.Object('bucket-name', 'file-name')
body = obj.get()['Body'].read()
print(body)

以上就是使用 Python 获取 S3 存储桶中数据的全部步骤。