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

Python批量上传文件至S3桶异常:仅单个文件成功上传

问题解决:S3文件上传时出现FileNotFoundError

错误核心原因

代码中使用os.listdir()获取的只是子目录内的文件名,而非完整本地路径。调用client.upload_file(files, ...)时,Python会在当前工作目录查找文件,而非raw_data/malay或raw_data/english子目录下,因此找不到马来语文件夹内的文件(英文文件夹的文件偶然成功,大概率是当前工作目录恰好存在同名文件)。

修复后的代码

构造完整本地文件路径,同时简化重复逻辑:

try:
    for folder in os.listdir('raw_data/'):
        # 仅处理目标文件夹,避免遍历无关目录/文件
        if folder not in ['malay', 'english']:
            continue
        folder_path = f'raw_data/{folder}'
        for filename in os.listdir(folder_path):
            upload_file_bucket = 'book-reviews-analysis'
            upload_file_key = f'{folder}/{filename}'
            # 构造完整本地文件路径
            local_file_path = f'{folder_path}/{filename}'
            client.upload_file(local_file_path, upload_file_bucket, upload_file_key)
            logger.info(f'--DONE UPLOADING {filename} TO BUCKET--')
except ClientError as e:
    print(e)
    logger.error(e)
except FileNotFoundError as e:
    print(f'本地文件不存在:{e}')
    logger.error(f'本地文件不存在:{e}')

额外优化建议

  • 用os.path.join()构造路径,适配不同操作系统的路径分隔符:
    import os
    folder_path = os.path.join('raw_data', folder)
    local_file_path = os.path.join(folder_path, filename)
    
  • 改用os.scandir()遍历目录,效率更高且可直接获取文件属性
  • 日志中加入文件名,便于追踪单个文件的上传状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:46:05