📅  最后修改于: 2023-12-03 15:41:57.927000             🧑  作者: Mango
在云计算领域,S3 是 Amazon Web Services (AWS) 提供的一种对象存储服务,提供了可靠的、安全的、易扩展的云存储解决方案。本文将介绍如何使用 Python 递归地将文件从 S3 复制到本地。我们将使用 Boto3,这是 AWS SDK for Python。
pip install boto3
Boto3 可以使用环境变量、配置文件或 IAM 角色进行身份验证。这里我们使用配置文件,先在本地创建一个配置文件 ~/.aws/config
,填入以下内容:
[default]
region = us-east-1
然后在 ~/.aws/credentials
中填写您的访问密钥(AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY):
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
确保您的密钥有 S3 访问权限。
以下代码将递归地遍历 S3 桶内的所有对象,并将它们复制到本地指定目录。
import os
import boto3
def download_from_s3(bucket_name, prefix, local_dir):
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
for obj in bucket.objects.filter(Prefix=prefix):
local_file_path = os.path.join(local_dir, obj.key[len(prefix):])
if not os.path.exists(os.path.dirname(local_file_path)):
os.makedirs(os.path.dirname(local_file_path))
bucket.download_file(obj.key, local_file_path)
print(local_file_path) # 打印本地复制路径
print(obj.key) # 打印 S3 对象路径
if obj.key.endswith('/'):
download_from_s3(bucket_name, obj.key, local_dir) # 递归地遍历子目录
在调用 download_from_s3()
函数时,需要传入 S3 桶名、S3 前缀、本地目录,例如:
download_from_s3('my-bucket', 'path/to/files/', '/local/dir/')
本文介绍了如何使用 Python 递归地将文件从 S3 复制到本地。如果您需要将本地文件上传到 S3,请将 download_from_s3()
函数中的 Bucket.download_file()
方法替换为 Bucket.upload_file()
方法即可。