如何使用Python从AWS S3指定文件夹上传下载数据?
Python实现AWS S3指定文件夹的文件上传与下载
准备工作
- 安装AWS SDK for Python:
pip install boto3 - 配置AWS凭证:
- 本地环境:在
~/.aws/credentials(Linux/macOS)或C:\Users\<用户名>\.aws\credentials(Windows)文件中添加:[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY - 云服务器环境:直接使用IAM角色(boto3会自动获取凭证,无需手动配置)
- 本地环境:在
上传文件到S3指定文件夹
以下代码可将本地文件上传到目标桶的Execution/Data/路径下:
import boto3 def upload_to_s3(local_file_path, bucket_name, s3_folder_path): s3 = boto3.client('s3') # 提取本地文件名,拼接成S3完整对象键 file_name = local_file_path.split('/')[-1] s3_object_key = f"{s3_folder_path}{file_name}" try: s3.upload_file(local_file_path, bucket_name, s3_object_key) print(f"文件 {file_name} 已成功上传到 s3://{bucket_name}/{s3_object_key}") except Exception as e: print(f"上传失败: {str(e)}") # 示例调用 bucket = "aws-xxx-use1-00-d-s3b-xxx-yyy-xxx" target_folder = "Execution/Data/" local_file = "/path/to/your/local/file.txt" # 替换为实际本地文件路径 upload_to_s3(local_file, bucket, target_folder)
从S3指定文件夹下载文件
以下代码可将Execution/Data/路径下的目标文件下载到本地:
import boto3 def download_from_s3(bucket_name, s3_folder_path, s3_file_name, local_save_path): s3 = boto3.client('s3') s3_object_key = f"{s3_folder_path}{s3_file_name}" try: s3.download_file(bucket_name, s3_object_key, local_save_path) print(f"文件 {s3_file_name} 已成功下载到 {local_save_path}") except Exception as e: print(f"下载失败: {str(e)}") # 示例调用 bucket = "aws-xxx-use1-00-d-s3b-xxx-yyy-xxx" target_folder = "Execution/Data/" s3_file = "example_file.txt" # 替换为S3文件夹内的目标文件名 local_path = "/path/to/save/local/file.txt" # 替换为本地保存路径 download_from_s3(bucket, target_folder, s3_file, local_path)
注意事项
- 确保AWS账号拥有目标桶的
s3:PutObject(上传)和s3:GetObject(下载)权限 - S3没有实际的文件夹概念,路径是通过对象键的前缀模拟的,上传时无需提前创建文件夹
- 大文件上传/下载时,
upload_file和download_file方法会自动处理分片逻辑
内容的提问来源于stack exchange,提问作者saurabh bhattacharya
相关产品推荐
相关产品推荐

