使用Python Boto3操作AWS S3对象

亚马逊网络服务(AWS)提供的S3是一种对象存储服务,它允许用户快速、安全地从任何地方存储和检索文件。用户可以将S3与其他服务结合,构建多种可扩展的应用。Boto是AWS的Python软件开发工具包(SDK),包括Boto2、Boto3和Botocore等不同版本。Boto3是SDK的最新版本,它是Boto的全面重写。通过boto3 Python库,用户可以连接到Amazon服务(包括S3),并在AWS内部使用资源。它帮助开发者创建、配置和管理AWS服务,使其易于与Python应用程序、库或脚本集成。本文将介绍boto3的工作原理以及它如何帮助与S3进行交互,例如创建、列出和删除存储桶和对象。

什么是Boto3

Boto3是一个Python SDK或库,可以通过Python脚本管理并访问AWS的多种服务,如Amazon S3、EC2、DynamoDB、SQS、Cloudwatch等。Boto3采用数据驱动的方法,从JSON描述文件中在运行时生成类,这些文件在SDK之间共享。由于Boto3是从这些共享的JSON文件生成的,用户可以快速获得最新服务的更新,并在服务之间获得一致的API。它提供了面向对象且易于使用的API以及低级别的直接服务访问。

Boto3的关键特性

Boto3建立在botocore之上,botocore是一个用于向AWS发送API请求并接收服务响应的Python库。它原生支持Python 2.7+和3.4+。Boto3提供了会话和每个会话的凭证与配置,以及认证、参数和响应处理等基本组件。它具有一致且最新的界面。

使用Boto3与AWS S3一起工作

使用Boto3库或SDK与Amazon S3一起工作,允许用户从Python程序或脚本中更快地创建、删除和更新S3存储桶、对象、S3存储桶策略等。Boto3有两种抽象,即客户端和资源。如果用户想要处理单个S3文件,可以选择客户端抽象;如果他们想要处理多个S3存储桶,则可以选择资源抽象。客户端提供了AWS服务的低级别接口,而资源则是比客户端更高级别的抽象。

安装Boto3并构建AWS S3客户端

在终端中使用以下代码安装Boto3到应用程序:

pip list

上述代码将列出已安装的包。如果Boto3未安装,请使用以下代码安装:

pip install boto3

构建一个S3客户端以访问服务方法:

import boto3 S3 = boto3.client( 's3', aws_access_key_id = '输入aws_access_key_id', aws_secret_access_key = '输入aws_secret_access_key', region_name = '输入aws_region_name' )

创建一个S3客户端,帮助访问存储在S3环境中的对象,并设置凭证,包括aws_access_key_id和aws_secret_access_key。要访问S3存储桶并运行以下代码,必须拥有凭证,如访问密钥和密钥。

创建存储桶:使用create_bucket()方法创建S3存储桶,带有Bucket和ACL参数。ACL代表访问控制列表,它管理对S3存储桶和对象的访问。需要注意的是,存储桶名称应该在整个AWS平台上是唯一的。

my_bucket = "输入要创建的s3存储桶名称" bucket = s3.create_bucket( ACL='private', Bucket= my_bucket )

列出存储桶:使用list_buckets()方法列出所有可用的存储桶。

bucket_response = s3.list_buckets() print('现有存储桶:') for bucket in bucket_response ['Buckets']: print(f' {bucket["Name"]}')

删除存储桶:使用delete_bucket()方法删除S3存储桶。存储桶必须是空的,即不包含任何对象才能执行删除。

my_bucket = "输入要删除的s3存储桶名称" response = s3.delete_bucket(Bucket= my_bucket) print("存储桶已成功删除!")

列出存储桶中的文件:使用list_objects()方法或list_objects_v2()方法列出S3存储桶中的文件或对象。

my_bucket = "输入要从中列出对象或文件的s3存储桶名称" response = s3.list_objects(Bucket= my_bucket, MaxKeys=10, Prefix="仅列出以该字符串开头的文件")

MaxKeys参数代表要列出的最大对象数量。Prefix参数列出键(名称)仅以特定前缀开头的对象。

另一种列出对象的方法:

s3 = boto3.client("s3") my_bucket = "输入要从中列出对象或文件的s3存储桶名称" response = s3.list_objects_v2(Bucket=my_bucket) files = response.get("Contents") for file in files: print(f"file_name: {file['Key']}, size: {file['Size']}")

上传文件:使用upload_file()方法上传文件到s3存储桶,参数包括:

my_bucket = "输入要上传文件的存储桶名称" file_name = "输入要上传的文件路径名称" key_name = "输入唯一标识符" s3.upload_file(Filename= file_name, Bucket= my_bucket, Key= key_name)

下载文件:使用download_file()方法从存储桶下载文件或对象到本地,参数包括Key、Bucket和Filename。

my_bucket = "输入要从中下载对象或文件的s3存储桶名称" file_name = "输入要下载的文件" key_name = "输入唯一标识符" s3.download_file(Filename= file_name, Bucket= my_bucket, Key= key_name)

删除文件:使用delete_object()方法从存储桶删除文件或对象,参数包括Key和Bucket。

my_bucket = "输入要从中删除对象或文件的s3存储桶名称" key_name = "输入唯一标识符" s3.delete_object(Bucket= my_bucket, Key= key_name) my_bucket = "输入要从中获取对象或文件元数据的s3存储桶名称" key_name = "输入唯一标识符" response = s3.head_object(Bucket= my_bucket, Key= key_name)
  • AWS S3是一种对象存储服务,帮助快速存储和检索文件。
  • Boto3是一个Python SDK或库,可以管理Amazon S3、EC2、DynamoDB、SQS、Cloudwatch等。
  • Boto3客户端提供了AWS服务的低级别接口,而资源是比客户端更高级别的抽象。
  • 使用Boto3库与Amazon S3一起工作,允许用户从Python程序或脚本中更快地创建、列出、删除和更新S3存储桶、对象、S3存储桶策略等。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485