如何在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
相关产品推荐
相关产品推荐

