Как вырваться из вложенных циклов в Python при поиске указанного значения c в файле Excel? - PullRequest
0 голосов
/ 10 января 2020

У меня есть файл Excel со списком магазинов и их адресами. Я хочу найти его по номеру магазина и сохранить адрес в файл. Моя проблема в том, что я новичок и не знаю, как заставить l oop остановиться и перезапустить input('Enter shop number: '), если в моем файле Excel нет номера магазина. В настоящее время мой сценарий печатает «Неверный номер магазина!» для каждого ряда. Кто-нибудь может мне помочь? Я знаю, что это, вероятно, что-то из базового c, но, как я уже сказал, я новичок ie ... Заранее спасибо!

import openpyxl
from openpyxl import Workbook

file = '...\\Desktop\\shops.xlsx'
wb = openpyxl.load_workbook(file, read_only=True)
ws = wb.active

shop = int(input('Enter shop number: '))

save = open('shop.txt', 'w')

for row in ws.iter_rows(1):
    for cell in row:
        if cell.value == shop:
            print(ws.cell(row=cell.row, column=2).value, file = save)
            save.close()
        else:
            print('Invalid shop number!')

Ответы [ 3 ]

0 голосов
/ 10 января 2020

Вы должны поместить логи c внутрь, когда l oop, где вы принимаете ввод, и прервать время, пока l oop, когда вы найдете адрес магазина в файле или на основе ваших требований.

save = open('shop.txt', 'w')    
while not found:
    shop = int(input('Enter shop number: '))
    for row in ws.iter_rows(1):
        for cell in row:
            if cell.value == shop:
               print(ws.cell(row=cell.row, column=2).value, file = save)
               save.close()
               found = True
               # or you can write
               # break
        if found:
            break
    if not found:
        print('Invalid shop number!')
0 голосов
/ 10 января 2020

Это работает! Спасибо всем за помощь!

save = open('shop.txt', 'w')    
while not found:
    shop = int(input('Enter shop number: '))
    for row in ws.iter_rows(1):
        for cell in row:
            if cell.value == shop:
               print(ws.cell(row=cell.row, column=2).value, file = save)
               save.close()
               found = true
               break
    if not found:
        print('Invalid shop number!')
0 голосов
/ 10 января 2020

Вы можете иметь логический флаг, чтобы указать, был ли найден номер магазина или нет:

found = False
for row in ws.iter_rows(1):
    for cell in row:
        if cell.value == shop:
            print(ws.cell(row=cell.row, column=2).value, file = save)
            save.close()
            found = True
if not found:
    print('Invalid shop number!')

Если вы хотите обрабатывать только первую найденную ячейку с номером магазина или нет повторяющихся номеров магазина , вы можете поместить это в функцию и вернуться после того, как найден номер магазина.

В качестве альтернативы, вы можете разбить оператор if и снова разбить после внутреннего l oop, если флаг True или continue в предложении else после внутреннего l oop и break после этого предложения.

См. ответы на этот связанный вопрос о том, как выйти из нескольких циклов .

...