📌  相关文章
📜  递归地将文件从 S3 复制到本地 (1)

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

递归地将文件从 S3 复制到本地

在云计算领域,S3 是 Amazon Web Services (AWS) 提供的一种对象存储服务,提供了可靠的、安全的、易扩展的云存储解决方案。本文将介绍如何使用 Python 递归地将文件从 S3 复制到本地。我们将使用 Boto3,这是 AWS SDK for Python。

步骤
  1. 安装 AWS SDK for Python (Boto3)
pip install boto3
  1. 配置 AWS 访问密钥

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 访问权限。

  1. 编写 Python 代码

以下代码将递归地遍历 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() 方法即可。