我有一系列嵌套循环,循环遍历多个 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
Run Code Online (Sandbox Code Playgroud)
所需的逻辑:
如果当前 excel 只有 1 个工作表,则检查 D 列是否没有单元格填充颜色,如果为真,则添加到数据框列表中,如果为假,则循环返回到下一个 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")
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |