是否可以使用python xlrd访问特定工作表中列中的所有行。
e.g:
workbook = xlrd.open_workbook('ESC data.xlsx', on_demand=True)
sheet = workbook.sheet['sheetname']
arrayofvalues = sheet['columnname']
或者我必须自己创建一本字典吗?
excel相当大,所以我希望避免迭代所有的colnames / sheet
答案 0 :(得分:8)
是的,您正在寻找col_values()
工作表方法。而不是
arrayofvalues = sheet['columnname']
你需要做
arrayofvalues = sheet.col_values(columnindex)
其中columnindex
是列的编号(从零开始计数,因此列A是索引0,列B是索引1,等等)。如果第一行(或前几行)中有描述性标题,则可以给出第二个参数,该参数指示从哪一行开始(再次从零开始计数)。例如,如果您有一个标题行,因此希望从第二行开始的值,则可以执行
arrayofvalues = sheet.col_values(columnindex, 1)
请查看tutorial,了解xlrd
包的合理可读性讨论。 (官方xlrd
documentation更难阅读。)
还要注意(1)当你可以自由使用名称arrayofvalues
时,你真正得到的是一个Python列表,它在技术上不是一个数组,以及(2){{1}使用.xlsx文件时,workbook参数无效,这意味着on_demand
将尝试将整个工作簿加载到内存中。 (xlrd
功能适用于.xls文件。)
答案 1 :(得分:3)
此脚本允许将xls文件转换为dictinnaries列表, 列表中的所有字典代表一行
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