2017-01-19 4 views
0

Я пытаюсь прочитать документы xlsx do, найти определенную полосу и распечатать область, но без печати None-lanes. Также прерывайте цикл, когда «None» находится в определенном столбце.цикл прерывания питона с условием

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. Я не могу решить эту проблему. Извините за собственные ошибки. Я новый питон и просто ищу ответ.

+0

можете ли вы включить свой файл excel с помощью Google Drive/Dropbox и указать строки, которые вы хотите извлечь? – MYGz

+0

@UrielEli, если это действительно был вопрос, задаваемый здесь, поскольку он добавил: «Также прерывайте цикл, когда None находится в определенной колонке». то почему мой ответ не был принят? В настоящее время он был проголосован до -1, когда я подумал, что он отвечает на вопрос, который я только что процитировал. – Cephlin

+0

@Cephlin Я не знаю, почему вы были заблокированы, но его довольно стандартный стандарт не для ответа на такие дубликаты, а их закрытия, поэтому люди будут перенаправлены на полные темы беседы. – Uriel

ответ

0

Когда вы проверяете, что цикл None, вместо возврата вы можете позвонить break, чтобы выйти из внутреннего цикла, а затем выполнить дополнительную логику перед возвратом. Вы также можете пропустить это для цикла, используя continue. Ниже приведен пример по разрыву внутреннего цикла.

Пример; это было бы остановить цикл for cell in rows:, если cell.value является 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: 
          rtn = 1 
          break 
        else: 
         print(cell.value, end=" ") 
       print() 

return rtn 

второй пример основан на разрушении из внешнего для контура (диапазон г для цикла):

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.

+0

Угадайте, что это не отвечает на вопрос, так как он был проголосован. Я думаю, может быть, вопрос требует больше информации для меня, чтобы понять, что задают тогда. Насколько я понял, он спрашивал, как сломать петлю. – Cephlin

+0

Не могли бы вы объяснить мой код, если это возможно? –

+0

@ IanJ-Van обновил мой ответ для вас. Вам нужно будет выяснить, что вы хотите вернуть, если вам нужно вообще что-то вернуть. – Cephlin

Смежные вопросы