Сохранение значений в разных переменных во вложенном цикле for

#python #excel #loops #for-loop #nested-loops

#python #excel #циклы #for-цикл #вложенные циклы

Вопрос:

В настоящее время я пишу фрагмент кода, который перебирает строки и столбцы электронной таблицы, а затем использует значение ячейки в строке r и столбце c в параметре функции. В настоящее время у меня это работает следующим образом:

 for i in range (1, ws.max_row 1): 
    first_column = worksheet.cell(i,1).value
    second_column = worksheet.cell(i,2).value
    third_column = worksheet.cell(i,3).value
    result = functionX.create(first_column, second_column, third_column)
  

Где индекс i перебирает строки на листе. Я использую worksheet.cell(row,column).value функцию из openpyxl библиотеки и сохраняю их в x_column переменных. Позже эти переменные используются в качестве параметров в class.create() функции в том же цикле for.

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

В качестве решения я подумал, что было бы полезно использовать вложенный цикл for для отслеживания столбцов:

 for i in range (1, ws.max_row 1):
    for j in range (1,4):
        first_column = worksheet.cell(i,j).value
        second_column = worksheet.cell(i,j).value
        third_column = worksheet.cell(i,j).value
    result = functionX.create(first_column, second_column, third_column)
  

Однако это, очевидно, не приведет к увеличению индекса j в пределах одной и той же итерации второго цикла. Есть идеи, как это решить?

Комментарии:

1. Пожалуйста, отформатируйте свой код. Python очень чувствителен к отступам, как и программисты на python.

2. @quamrana Готово! 🙂

3. @Graipher был просто абстракцией, но отредактирован в любом случае

Ответ №1:

Если вы действительно хотите использовать цикл for для столбцов, вы могли бы использовать список для преобразования значений ячеек, а затем распаковать этот список, чтобы передать преобразованные значения в метод .create() .

Это также гибко, если вы хотите добавить больше столбцов без изменения большого количества кода, просто увеличьте диапазон второго цикла.

Это может выглядеть так:

 for i in range (1, ws.max_row 1):
    column_list = []
    for j in range (1, 4):
        column_list.append(worksheet.cell(i,j).value)

    # the '*' unpacks the whole list
    result = the_class.create(*column_list)
  

Это работает для вас?