Amazon Web Services (AWS) 提供了 Simple Storage Service (S3) 作为云存储解决方案。通过 S3,用户可以存储和检索任意数量的数据,从任何地方访问。要使用 Python 与 AWS S3 进行交互,通常会使用 AWS SDK for Python,也称为 Boto3。
安装 Boto3
首先,确保安装了 Boto3。如果还没有安装,可以通过 pip 安装:
Bash
深色版本
1pip install boto3
配置 AWS 凭证
在开始之前,需要配置 AWS 凭证。这可以通过多种方式完成,包括但不限于:
- 环境变量:
- Bash
- 深色版本
- 1export AWS_ACCESS_KEY_ID=<your_access_key> 2export AWS_SECRET_ACCESS_KEY=<your_secret_key>
- ~/.aws/credentials 文件:
- Ini
- 深色版本
- 1[default] 2aws_access_key_id = <your_access_key> 3aws_secret_access_key = <your_secret_key>
- 直接在代码中设置 (不建议,仅适用于测试目的):
- Python
- 深色版本
- 1import boto3 2 3s3 = boto3.client( 4 's3', 5 aws_access_key_id='<your_access_key>', 6 aws_secret_access_key='<your_secret_key>' 7)
基本示例
接下来是一些使用 Boto3 与 S3 进行交互的基本示例。
创建 S3 客户端
Python
深色版本
1import boto3
2
3# 创建 S3 客户端
4s3_client = boto3.client('s3')
列出所有 S3 存储桶
Python
深色版本
1# 列出所有存储桶
2response = s3_client.list_buckets()
3
4# 打印存储桶名称
5for bucket in response['Buckets']:
6 print(bucket['Name'])
创建新的 S3 存储桶
Python
深色版本
1bucket_name = 'my-new-bucket'
2
3# 创建一个新的存储桶
4s3_client.create_bucket(Bucket=bucket_name)
上传文件到 S3
Python
深色版本
1file_path = '/path/to/local/file.txt'
2key = 'file.txt' # S3 中的对象键名
3
4# 上传文件
5s3_client.upload_file(file_path, bucket_name, key)
下载文件从 S3
Python
深色版本
1destination_path = '/path/to/download/file.txt'
2
3# 下载文件
4s3_client.download_file(bucket_name, key, destination_path)
删除 S3 对象
Python
深色版本
1# 删除特定对象
2s3_client.delete_object(Bucket=bucket_name, Key=key)
3
4# 删除整个存储桶及其内容
5response = s3_client.list_objects_v2(Bucket=bucket_name)
6for obj in response.get('Contents', []):
7 s3_client.delete_object(Bucket=bucket_name, Key=obj['Key'])
8
9# 删除空存储桶
10s3_client.delete_bucket(Bucket=bucket_name)
示例代码
下面是将上述功能组合在一起的一个完整示例:
Python
深色版本
1import boto3
2
3def list_buckets(s3_client):
4 """列出所有的 S3 存储桶"""
5 response = s3_client.list_buckets()
6 return [bucket['Name'] for bucket in response['Buckets']]
7
8def create_bucket(s3_client, bucket_name):
9 """创建一个新的 S3 存储桶"""
10 s3_client.create_bucket(Bucket=bucket_name)
11
12def upload_file(s3_client, file_path, bucket_name, key):
13 """上传文件到 S3"""
14 s3_client.upload_file(file_path, bucket_name, key)
15
16def download_file(s3_client, bucket_name, key, destination_path):
17 """从 S3 下载文件"""
18 s3_client.download_file(bucket_name, key, destination_path)
19
20def delete_object(s3_client, bucket_name, key):
21 """删除 S3 中的对象"""
22 s3_client.delete_object(Bucket=bucket_name, Key=key)
23
24def delete_bucket(s3_client, bucket_name):
25 """删除 S3 存储桶及其内容"""
26 response = s3_client.list_objects_v2(Bucket=bucket_name)
27 for obj in response.get('Contents', []):
28 s3_client.delete_object(Bucket=bucket_name, Key=obj['Key'])
29 s3_client.delete_bucket(Bucket=bucket_name)
30
31if __name__ == '__main__':
32 s3_client = boto3.client('s3')
33
34 # 创建一个新的存储桶
35 bucket_name = 'example-bucket'
36 create_bucket(s3_client, bucket_name)
37
38 # 上传文件
39 file_path = '/path/to/local/file.txt'
40 key = 'file.txt'
41 upload_file(s3_client, file_path, bucket_name, key)
42
43 # 列出存储桶
44 buckets = list_buckets(s3_client)
45 print("Current buckets:", buckets)
46
47 # 下载文件
48 destination_path = '/path/to/download/file.txt'
49 download_file(s3_client, bucket_name, key, destination_path)
50
51 # 删除文件
52 delete_object(s3_client, bucket_name, key)
53
54 # 删除存储桶
55 delete_bucket(s3_client, bucket_name)
这个脚本包含了与 S3 进行基本交互所需的所有功能。你可以根据自己的需求修改和扩展这些功能。
本文暂时没有评论,来添加一个吧(●'◡'●)