通过列名和表名获取列数据
有没有办法通过使用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_demand
function适用于.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