使用 AWS boto3 库从 s3 桶中批量下载数据

文章目录

  • [一、Boto3 快速安装](#一、Boto3 快速安装)
  • 二、账户配置
  • 三、代码示例
    • [3.1 下载单个文件](#3.1 下载单个文件)
    • [3.2 下载文件夹内全部文件](#3.2 下载文件夹内全部文件)

官方文档

一、Boto3 快速安装

安装 Boto3 之前,先安装 Python 3.8 或更高版本;对 Python 3.6 及更早版本的支持已弃用。

通过 pip 安装最新的 Boto3 版本:

shell 复制代码
pip install boto3

使用 AWS Common Runtime (CRT)

除了默认安装 Boto3 之外,还可以选择包含新的 CRT。AWS CRT 是模块化包的集合,充当 AWS 开发工具包的新基础。每个库都为其实现的功能区域提供更好的性能和最小的占用空间。使用 CRT,开发工具包可以在可能的情况下共享相同的基本代码,从而提高 AWS 开发工具包之间的一致性和吞吐量优化。

但是,Boto3 默认情况下不使用 AWS CRT,但可以通过在安装 Boto3 时指定 crt 额外功能来选择使用它:

shell 复制代码
pip install boto3[crt]

要恢复到 Boto3 的非 CRT 版本,使用以下命令:

shell 复制代码
pip uninstall awscrt

如果需要重新启用 CRT,重新安装 boto3[crt] 以确保获得兼容版本 awscrt

二、账户配置

  1. 在代码中配置账户信息:
shell 复制代码
s3 = boto3.resource('s3', aws_access_key_id="", aws_secret_access_key="")
# s3 = boto3.client('s3', aws_access_key_id="", aws_secret_access_key="")
  1. 在电脑配置文件中配置账户信息(提前安装 AWS CLI):
    • 可以使用 aws configure 命令来修改配置文件;
    • 可以直接修改配置文件,默认情况下,配置文件的位置为 ~/.aws/credentials。配置文件至少应该指定 aws_access_key_idaws_secret_access_key

三、代码示例

3.1 下载单个文件

python 复制代码
import boto3

# 配置S3连接
s3 = boto3.resource('s3')
bucket_name = 'your-bucket-name'

# 定义要下载的文件名
file_key = 'your-file-path-in-s3'

# 下载文件
s3.Bucket(bucket_name).download_file(file_key, 'local-file-path')

3.2 下载文件夹内全部文件

python 复制代码
def download_folder(bucket_name, folder, local_dir=None):
    """
        Download an object from an S3 bucket
    """
    count = 0
    bucket = s3.Bucket(bucket_name)

    for obj in bucket.objects.filter(Prefix=folder):
        target = obj.key #if local_dir is None else os.path.join(local_dir, os.path.relpath(obj.key, folder))
        if not os.path.exists(os.path.dirname(os.path.dirname(target))):
            os.makedirs(os.path.dirname(os.path.dirname(target)))
        # 额外下载文件夹中文件夹内的 object
        #if obj.key[-1] == '/':
        #    continue
        target_path = os.path.join(os.path.dirname(os.path.dirname(target)), target.split('/')[-1])
        bucket.download_file(obj.key, target_path)
        count += 1

    print("cont: ", count)
相关推荐
眷怀6 小时前
网卡绑定bonding
linux·运维·服务器·网络·云计算
数勋API8 小时前
银行卡归属地查询API接口如何用PHP调用
开发语言·云计算·php
zhojiew10 小时前
aws xray通过设置采样规则对请求进行过滤
aws
tmgmforex202410 小时前
亚马逊云计算部门挑战英伟达,提供免费AI计算能力
人工智能·科技·云计算
CCSBRIDGE13 小时前
给阿里云OSS绑定域名并启用SSL
阿里云·云计算·ssl
沈艺强15 小时前
云计算在esxi 主机上创建 4g磁盘,同时在此磁盘上部署linux
云计算
九河云1 天前
AWS EC2镜像费用详解:什么是免费的,什么是收费的?
服务器·云计算·aws
sealaugh321 天前
aws(学习笔记第十二课) 使用AWS的RDS-MySQL
笔记·学习·aws
杰森V+1 天前
融云:社交泛娱乐出海机会尚存,跨境电商异军突起
网络·云计算
腾讯蓝鲸智云1 天前
大模型在蓝鲸运维体系应用——蓝鲸运维开发智能助手
运维·自动化·云计算·sass