如何实现文件状态为PUSHED时从第二次迭代起跳过对应操作?
实现跳过已完成状态BU的后续迭代判断
原始代码
# 支持多于两个元素 item_list = ["rpm", "exe"] extraction_status = True while extraction_status: file_status_flag = True file_status = some_other_function(arg1, arg2) # 返回嵌套字典列表 for item in file_status['BU']: # file_status['BU'] = ["HR", "DEV" ,"Admin"] if item['extensions'] in item_list: # rpm或exe或zip if (file_status['status'] == "PUSHED"): print("file from {} reached target..".format(item)) # 对该文件执行后续操作 continue # 不生效 else: print("Status of {} is {}".format(item, file_status['status'])) # 检查item_list中所有元素是否已推送完成 if (file_status_flag and (file_status['status'] == "PUSHED")): "All files reached target..make the script successful.." extraction_status = False
需求说明
当某个BU(如HR)的文件状态变为PUSHED后,第一次迭代时执行对应操作,后续循环迭代直接跳过该BU的状态判断及操作。当前使用的continue只能跳过单次循环迭代,无法实现该效果,请问如何实现?
示例输出:
1st iteration: file from BU reached target file from DEV In Progress file from Admin Not Prepared 2nd iteration: file from DEV In Progress file from Admin In Progress
以此类推。
解决方案
可以通过维护一个已完成BU的集合来实现这个需求,每次循环只处理未完成的BU,具体修改如下:
# 支持多于两个元素 item_list = ["rpm", "exe"] completed_bus = set() # 新增:记录已完成状态的BU extraction_status = True while extraction_status: file_status_flag = True file_status = some_other_function(arg1, arg2) # 返回嵌套字典列表 # 过滤掉已完成的BU,只处理未完成的 pending_bus = [bu for bu in file_status['BU'] if bu not in completed_bus] for item in pending_bus: if item['extensions'] in item_list: if file_status['status'] == "PUSHED": print("file from {} reached target..".format(item)) # 对该文件执行后续操作 completed_bus.add(item) # 将该BU标记为已完成 else: print("Status of {} is {}".format(item, file_status['status'])) # 检查所有需要处理的BU是否都已完成 all_completed = all(bu in completed_bus for bu in file_status['BU']) if all_completed: print("All files reached target..make the script successful..") extraction_status = False
修改说明
- 新增
completed_bus集合,用来存储已经处理过(状态为PUSHED)的BU,集合的查询效率更高,适合做状态标记。 - 每次循环时,通过列表推导式生成
pending_bus,只保留未完成的BU,直接跳过已完成的项。 - 当某个BU状态变为
PUSHED时,将其加入completed_bus,后续循环就不会再处理它。 - 调整循环结束的判断逻辑,改为检查所有BU是否都已加入
completed_bus,确保所有文件都完成后才终止循环。
内容的提问来源于stack exchange,提问作者Chel MS
相关产品推荐
相关产品推荐

