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

