openpyxl: перебирать все строки и получать данные строк в кортеже - PullRequest
0 голосов
/ 11 октября 2018

Как перебрать все строки в листе xls и получить данные каждой строки в кортеже.Таким образом, в конце итерации у меня должен быть список кортежей с каждым элементом в списке, который является кортежем данных строки.Например: это содержимое моей электронной таблицы:

testcase_ID input_request request_change test_1A test/request_1 YES test_2A test/request_2 NO test_3A test/request_3 YES test_4A test/request_4 YES

мой окончательный список должен быть: [(test_1A, test / request_1, YES), (test_2A, test / request_2,НЕТ), (test_3A, test / request_3, YES), (test_4A, test / request_4, YES)]

Как это сделать в openpyxl?

1 Ответ

0 голосов
/ 11 октября 2018

Я думаю, что эта задача будет проще с xlrd.Однако, если вы хотите использовать openpyxl, тогда предположим, что testcase_ID находится в столбце A, input_request в столбце B и request_change в столбце C, что-то вроде этого может быть тем, что вы есть.ищу:

import openpyxl as xl

#Opening xl file
wb = xl.load_workbook('PATH/TO/FILE.xlsx')
#Select your sheet (for this example I chose active sheet)
ws = wb.active

#Start row, where data begins
row = 2
testcase = '' #this is just so that you can enter while - loop

#Initialiazing list
final_list = []

#With each iteration we get the value of testcase, if the cell is empty
#tescase will be None, when that happens the while loop will stop
while testcase is not None:

    #Getting cell value, from columns A, B and C
    #Iterating through rows 2, 3, 4 ... 
    testcase = ws['A' + str(row)].value
    in_request = ws['B' + str(row)].value
    req_change = ws['C' + str(row)].value

    #Making tuple
    row_tuple = (testcase, in_request, req_change)
    #Adding tuple to list
    final_list.append(row_tuple)

    #Going to next row
    row += 1

#This is what you return, you don't want the last element
#because it is tuple of None's
print(final_list[:-1])

Если вы хотите сделать это с xlrd, вот как я бы это сделал:

import xlrd

#Opening xl file
wb = xlrd.open_workbook('PATH/TO/FILE.xlsx')
#Select your sheet (for this example I chose first sheet)
#you can also choose by name or something else
ws = wb.sheet_by_index(0)

#Getting number of rows and columns
num_row = ws.nrows
num_col = ws.ncols

#Initializing list
final_list = []

#Iterating over number of rows
for i in range(1,num_row):
    #list of row values
    row_values = []
    #Iterating over number of cols
    for j in range(num_col):  
        row_values.append(ws.cell_value(i,j))

    #Making tuple with row values
    row_tuple = tuple(row_values)
    #Adding tuple to list
    final_list.append(row_tuple)


print(final_list)

Добавление xlrd комментариев к спецификациям индекса в конце дляпростое чтение:

  • Удаляется, если оператор, когда num_row равен 1, цикл for никогда не выполняется
  • xlrd индексирует строки, начинающиеся с 0
  • , для строки 2 мы хотим индекс1
  • Столбцы также индексируются нулями (A = 0, B = 1, C = 2 ...)
...