python - 如何返回到for循环中的特定点?
问题描述
我有一系列嵌套循环,循环遍历许多 excel 文件,并根据对内容的检查,将内容添加到数据框列表中。
在某种情况下我需要跳出当前循环,不添加到数据框列表,继续解析下一个excel。不幸的是,我无法弄清楚如何设置循环以完成我想要的行为。
目前代码如下。我添加了解释我正在寻找什么行为的评论。
for name in folder_names:
path = rf'I:\PATH\{name}'
file_list = [f for f in glob.glob(path+"/*.xlsx")]
df_list = []
for f in file_list: #if a break event is triggered, I need to return here.
xl = pd.ExcelFile(f)
if len(xl.sheet_names) == 1:
wb = load_workbook(f, data_only = True)
sh = wb.worksheets[0]
ColNames = {}
Current = 0
for COL in sh.iter_cols(1, sh.max_column):
ColNames[COL[0].value] = Current
Current += 1
for row_cells in sh.iter_rows(min_row=2, max_row=len(sh['D'])):
if row_cells[ColNames['XXXX ID']].fill.start_color.index != '00000000':
path_file.write(f+'\n')
break
df_list.append(pd.read_excel(f)) #if a break event is triggered, I need this line to NOT be executed
所需的逻辑:
如果当前 excel 只有一张表,则检查 D 列是否没有单元格填充颜色,如果为 true,则添加到数据框列表,如果为 false,则循环返回到下一个 excel 文件。
解决方案
你可以写一个for ... else ...
声明。
for i in range(5):
print(i)
if i > 2:
print("Hit break")
break
else:
print("I didn't hit a break inside the loop")
0 1 2 3 击中休息
for i in range(5):
print(i)
if i > 2:
pass
else:
print("I didn't hit a break inside the loop")
0 1 2 3 4 我没有在循环内打断
所以要回答你的问题,你只需要这样做:
...
for row_cells in sh.iter_rows(min_row=2, max_row=len(sh['D'])):
if row_cells[ColNames['XXXX ID']].fill.start_color.index != '00000000':
path_file.write(f+'\n')
break
else: # <- add this line and indent your code
df_list.append(pd.read_excel(f))
推荐阅读
- kubernetes - 如何监控在 Kubernetes 上运行的 Pod?
- ios - 根据文本或标题动态更改 UITextField、UILabel、UITextView、UIButton 字体
- python - 我需要帮助!!!sqlite3中的输入错误,我是新手
- php - 调用构造方法时如何动态设置参数
- javascript - 是否可以使用 html 和 javascript 制作决策树?
- javascript - API 没有响应
- c++ - 在 Codeblocks 16.01 中,警告被视为错误
- html - 向菜单提供滚动条时子菜单未打开
- android - 安装应用程序失败
- automated-tests - testcafe 中 --disable-page-reloads 标志的进展或方向是什么?