【问题标题】:python breaking cycle with condition [duplicate]python打破循环条件[重复]
【发布时间】:2017-06-04 02:36:28
【问题描述】:

我正在尝试阅读 xlsx do 文档,查找特定车道并打印一个区域,但不打印无车道。当“无”在特定列中时也打破循环。

def some():
    for r in range(1, ws.max_row):
        for c in range(1, ws.max_column):
            db = ws.cell(row=r, column=c)
            if db.value == 'this one':
                for rows in ws.iter_rows(min_row=r + 1, min_col=c - 1,
                                         max_row=r + 30, max_col=c):
                    for cell in rows:
                        if cell.value is None:
                            if column_index_from_string(db.column) == c:
                                return
                        else:
                            print(cell.value, end=" ")
                    print()

此代码返回唯一的 1 个通道,然后中断头部循环。 输出: 1315 文本
文件格式:https://drive.google.com/file/d/0B_bbUxPgcVESVGstWWRxV3k4emM/view。我无法解决这个问题。请原谅本机错误。我是新蟒蛇,正在寻找答案。

【问题讨论】:

  • 您能否通过 google drive/dropbox 包含您的 excel 文件并提及您要提取的行?
  • @UrielEli 如果这真的是这里要问的问题,因为他说“当 None 在特定列中时也打破循环。”那为什么我的回答没有被接受?目前它被否决为-1,当我认为它回答了我刚刚引用的问题时。
  • @Cephlin 我不知道你为什么被否决了,但这里的标准是不回答此类重复但关闭它们,因此人们将被重定向到完整的对话线程。
  • @UrielEli 好吧,这很公平,但也许他们本可以留下评论通知我这一点,而不是公然否决正确答案... 否决正确答案似乎很奇怪。谢谢你告诉我。

标签: python openpyxl


【解决方案1】:

当您检查循环是None,而不是返回,您可以调用break 退出内部循环,然后在返回之前有进一步的逻辑。您也可以使用 continue 跳过该 for 循环。有关打破内循环的示例,请参见下文。

示例;如果cell.valueNone,这将停止for cell in rows: 循环:

for r in range(1, ws.max_row):
    for c in range(1, ws.max_column):
        db = ws.cell(row=r, column=c)
        if db.value == 'My specific Value':
            for rows in ws.iter_rows(min_row=r+1, min_col=c-1, max_row=r+30, max_col=c):
                for cell in rows:
                    if cell.value is None:
                        if column_index_from_string(db.column) == c:
                            rtn = 1
                            break
                    else:
                        print(cell.value, end=" ")
                print()

return rtn

第二个基于打破外部for循环的示例(r范围for循环):

def print_while_cell_is_not_none():
    for r in range(1, ws.max_row):
        for c in range(1, ws.max_column):
            db = ws.cell(row=r, column=c)
            if db.value == 'My specific Value':
                for rows in ws.iter_rows(min_row=r + 1, min_col=c - 1,
                                         max_row=r + 30, max_col=c):
                    for cell in rows:
                        if cell.value is None:
                            if column_index_from_string(db.column) == c:
                                return
                        else:
                            print(cell.value, end=" ")

第二个示例会破坏整个方法,从而跳出for r in range for 循环。

【讨论】:

  • 猜猜这并不能回答问题,因为它已被否决。我想也许这个问题需要更多信息才能让我理解当时的问题。据我了解,它是在询问如何打破循环。
  • 如果可能的话,你能解释一下我的代码吗?
  • @IanJ-Van 为您更新了我的答案。如果您需要退回任何东西,则必须弄清楚要退回的东西。
  • @Celphlin 我不需要返回任何东西,但是当 C 列中只有 None 时打破循环
  • 然后break 会这样做。
猜你喜欢
  • 2016-01-20
  • 2015-02-20
  • 2020-04-21
  • 2011-12-08
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多