You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python代码中指定文件夹名,将本地CSV上传至S3存储桶?

如何在Boto3上传CSV到S3时指定目标文件夹?

我需要将本地主机(localhost)的CSV文件上传至S3存储桶中的指定文件夹,但不清楚如何在以下代码中指定文件夹名称,恳请提供帮助。代码如下:

import boto3
import os
def upload_files(path):
    session = boto3.Session(
        aws_access_key_id='',
        aws_secret_access_key='',
        region_name='us-east-1'
    )
    s3 = session.resource('s3')
    bucket = s3.Bucket('ag-tpch')
    for subdir, dirs, files in os.walk(path):
        for file in files:
            full_path = os.path.join(subdir, file)
            # 这里不知道怎么指定S3的目标文件夹

别担心,其实S3里的“文件夹”本质是对象键的一部分,你只需要在上传时给对象加上指定的前缀(也就是你想要的文件夹路径)就行。我来帮你修改代码,并解释关键要点:

修改后的完整代码

import boto3
import os

def upload_files(local_path, s3_target_folder):
    # 初始化S3会话(记得替换成你的真实密钥)
    session = boto3.Session(
        aws_access_key_id='YOUR_ACCESS_KEY',
        aws_secret_access_key='YOUR_SECRET_KEY',
        region_name='us-east-1'
    )
    s3 = session.resource('s3')
    bucket = s3.Bucket('ag-tpch')

    # 遍历本地目录下的所有文件
    for subdir, dirs, files in os.walk(local_path):
        for file in files:
            # 构建本地文件的完整路径
            local_full_path = os.path.join(subdir, file)
            # 获取文件相对于本地根目录的相对路径,保留原有目录结构
            relative_path = os.path.relpath(local_full_path, local_path)
            # 拼接S3目标文件夹与相对路径,生成最终的对象键
            s3_object_key = os.path.join(s3_target_folder, relative_path)
            # 替换Windows系统的反斜杠为S3兼容的正斜杠
            s3_object_key = s3_object_key.replace('\\', '/')

            # 执行上传操作
            bucket.upload_file(local_full_path, s3_object_key)
            print(f"已成功上传: {local_full_path} -> s3://ag-tpch/{s3_object_key}")

# 使用示例:传入本地CSV文件所在的根路径,以及S3的目标文件夹路径
upload_files('/path/to/your/local/csvs', 'target-folder/sub-folder/')

关键说明

  • S3的“文件夹”是逻辑概念:S3本身是扁平化存储,没有真实的文件夹,所谓的文件夹只是对象键中包含的路径前缀(比如target-folder/file.csv会在控制台显示为target-folder文件夹下的文件)。
  • 保留本地目录结构:通过os.path.relpath()获取文件相对本地根目录的路径,再和目标文件夹拼接,能让S3上的文件结构和本地保持一致。
  • 路径兼容性处理:如果是Windows系统,本地路径会用反斜杠\,需要替换成S3支持的正斜杠/,避免出现异常的对象键。

内容的提问来源于stack exchange,提问作者user9484383

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:42:43