如何在Python Lambda中为S3文件重命名并追加时间戳?
S3文件移动并追加时间戳的Lambda函数修复方案
原代码存在的问题
- 未定义
data变量:dt = datetime.datetime.strptime(data[4]+data[5],'%Y%m%d%H%M%S')中的data从未声明,执行到这里直接抛出异常,后续逻辑根本无法运行 - datetime对象直接拼接字符串报错:即使成功生成
dt,直接将datetime对象与字符串相加会触发类型错误,无法生成预期文件名 - 文件名格式错误:直接把时间戳加在完整文件名末尾,会得到
filename.extYYYYMMDDHHMMSS,不符合filename-YYYYMMDDHHMMSS.ext的需求 - 缺少原文件删除步骤:S3没有原生“移动”操作,仅复制到
processed文件夹后,原文件仍会留在原位置,并未真正完成“移动”
修复后的代码片段
import datetime import os # 新增,用于处理文件名拆分 def handler(event, context): LOGGER.info(f'Event structure: {event}') LOGGER.info(f'DST_BUCKET: {DST_BUCKET}') for record in event['Records']: src_bucket_name = record['s3']['bucket']['name'] src_key = record['s3']['object']['key'] copy_source = { 'Bucket': src_bucket_name, 'Key': src_key } LOGGER.info(f'copy_source: {copy_source}') dst_bucket = s3.Bucket(DST_BUCKET) LOGGER.info(f'bucket: {dst_bucket}') # 复制到目标桶 dst_bucket.copy(copy_source, src_key) try: # 验证目标桶文件是否存在 s3.Object(DST_BUCKET, src_key).load() LOGGER.info(f"File {src_key} uploaded to Bucket {DST_BUCKET}") src_bucket = s3.Bucket(src_bucket_name) # 直接用事件里的源桶名,避免硬编码 # 生成时间戳字符串(当前处理时间) timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S') # 拆分文件名和扩展名 file_name, file_ext = os.path.splitext(os.path.basename(src_key)) # 构建新的目标key:processed/文件名-时间戳.扩展名 new_processed_key = f'processed/{file_name}-{timestamp}{file_ext}' # 复制到processed文件夹 src_bucket.copy(copy_source, new_processed_key) LOGGER.info(f"File copied to processed folder: {new_processed_key}") # 删除原文件(完成S3的“移动”操作) s3.Object(src_bucket_name, src_key).delete() LOGGER.info(f"Original file {src_key} deleted from source bucket") except Exception as e: LOGGER.error(f"Error processing file {src_key}: {str(e)}") return {"error": str(e)} return {'status': 'ok'}
关键修改说明
- 时间戳生成:用
datetime.now().strftime()直接生成格式化的时间戳字符串,避免strptime的解析错误(如果需要使用文件的最后修改时间,可以替换为s3.Object(src_bucket_name, src_key).last_modified.strftime('%Y%m%d%H%M%S')) - 文件名处理:通过
os.path.splitext和os.path.basename正确拆分文件名与扩展名,确保时间戳加在文件名和扩展名之间 - 源桶名动态获取:从事件中直接获取源桶名,避免硬编码导致的兼容性问题
- 新增原文件删除:复制完成后删除原文件,真正实现S3中的“移动”效果
- 错误日志增强:添加错误日志,方便排查问题
内容的提问来源于stack exchange,提问作者stonewalker747
相关产品推荐
相关产品推荐

