通过列名和表名获取列数据

有没有办法通过使用python xlrd访问特定工作表中的列中的所有行。

例如:

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

还是我必须自己创build一本字典?

excel是相当大的,所以我很乐意避免遍历所有的colnames /表

是的,您正在寻找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)在使用.xlsx时on_demand工作簿参数没有效果文件,这意味着xlrd会尝试将整个工作簿加载到内存中。 ( on_demandfunction适用于.xls文件。)

这个脚本允许将一个xls文件转换为dictinnaries列表,列表中的所有dict代表一行

 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