Получить данные столбца по имени столбца и имени листа

Есть ли способ получить доступ ко всем строкам в столбце на определенном листе с помощью python xlrd.

e.g:

workbook = xlrd.open_workbook('ESC data.xlsx', on_demand=True)
sheet = workbook.sheet['sheetname']
arrayofvalues = sheet['columnname']

Или мне нужно создать словарь самостоятельно?

Excel довольно большой, поэтому я бы хотел избежать повторения всех имен столбцов/листов.


person Sillyreduction    schedule 11.07.2016    source источник


Ответы (2)


Да, вы ищете метод рабочего листа col_values(). Вместо

arrayofvalues = sheet['columnname']

вам нужно сделать

arrayofvalues = sheet.col_values(columnindex)

где columnindex — номер столбца (считая с нуля, поэтому столбец A имеет индекс 0, столбец B — индекс 1 и т. д.). Если у вас есть описательный заголовок в первой строке (или первых нескольких строках), вы можете указать второй параметр, указывающий, с какой строки начинать (опять же, считая с нуля). Например, если у вас есть одна строка заголовка и, следовательно, нужны значения, начинающиеся во второй строке, вы можете сделать

arrayofvalues = sheet.col_values(columnindex, 1)

Пожалуйста, ознакомьтесь с учебником, где можно найти разумно читаемое обсуждение пакет xlrd. (Официальную xlrd документацию читать сложнее.)

Также обратите внимание, что (1) хотя вы можете свободно использовать имя arrayofvalues, на самом деле вы получаете список Python, который технически не является массивом, и (2) параметр рабочей книги on_demand не действует при работе с .xlsx. файлов, что означает, что xlrd будет пытаться загрузить всю книгу в память независимо от этого. (Функция on_demand работает для файлов .xls.)

person John Y    schedule 12.07.2016

Этот скрипт позволяет преобразовать файл xls в список словарей, все слова в списке представляют строку

import xlrd

workbook = xlrd.open_workbook('esc_data.xlss')
workbook = xlrd.open_workbook('esc_data.xlsx', on_demand = True)
worksheet = workbook.sheet_by_index(0)
first_row = [] # Header
for col in range(worksheet.ncols):
    first_row.append( worksheet.cell_value(0,col) )
# tronsform the workbook to a list of dictionnaries
data =[]
for row in range(1, worksheet.nrows):
    elm = {}
    for col in range(worksheet.ncols):
        elm[first_row[col]]=worksheet.cell_value(row,col)
    data.append(elm)
print data
person khelili miliana    schedule 11.07.2016