一、安装xlrd
库的安装我这里就不说了..
二、读取 excel
前提条件:excel文件名称为 excel_data.xlsx
1、打开excelw 文件
workbook = xlrd.open_workbook(filename) # filename 为excel文件路径 + 文件名称
2、获取 excel 的sheet工作表的内容
(1)比如:获取第一个sheet工作表的名称,如图
贴上代码:
get_sheet_name = workbook.sheet_names()[0] # [0]表示索引,获取第一个sheet工作表名称
(2)比如:获取 excel 所有的sheet工作表的名称
sheetname = workbook.sheet_names()
(3)根据工作表的名称获取sheet工作表页的对象
workbook = xlrd.open_workbook(FileName)
get_sheet_name = workbook.sheet_names()[0] sheet2 = workbook.sheet_by_name(get_sheet_name) print(sheet2)
输出:
<xlrd.sheet.Sheet object at 0x00000181B7CFCA90>
(4)根据工作表的索引获取sheet工作表页的对象
workbook = xlrd.open_workbook(FileName) sheet1 = workbook.sheet_by_index(0) print(sheet1)
输出:
<xlrd.sheet.Sheet object at 0x000001C661A8C9B0>
(5)获取sheet工作表的行数和列数
workbook = xlrd.open_workbook(FileName) # 打开文件 sheet1 = workbook.sheet_by_index(1) # 根据索引获取第一个工作表的内容(通过更改索引数字1,可以获取第几个工作表的内容) nrows = sheet1.nrows # 获取sheet工作表的行数
ncols = sheet1.ncols # 获取sheet工作表的列数 print(nrows) print(ncols)
输出:
11和7;说明有11行和7列
(6)获取第1行(索引为0)的内容(是一个列表)
workbook = xlrd.open_workbook(FileName) sheet1 = workbook.sheet_by_index(1) row_data = sheet1.row_values(0) print(row_data)
(7)获取第1列(索引为0)的值(是一个列表)
workbook = xlrd.open_workbook(FileName) sheet1 = workbook.sheet_by_index(1) col_data = sheet1.col_values(0) print(col_data)
(8)使用行列索引(从0开始)获取单元格的数据
workbook = xlrd.open_workbook(FileName) sheet1 = workbook.sheet_by_index(1) cell_A1 = sheet1.cell(0, 0) print(cell_A1)
(9)将Excel文件中的数据转换成json数组
import xlrd import json def readexcel(FileName): workbook = xlrd.open_workbook(FileName) sheet1 = workbook.sheet_by_index(1) nrows = sheet1.nrows idx = sheet1.row_values(0) # 最终的数据列表 data = [] # 从第1行开始遍历循环所有行,获取每行的数据 for i in range(1,nrows): row_data = sheet1.row_values(i) # 组建每一行数据的字典 row_data_dict = {} # 遍历行数据的每一项,赋值进行数据字典 for j in range(len(row_data)): item = row_data[j] row_data_dict[idx[j]] = item # 将年份字段转成整形 #row_data_dict['year'] = int(row_data_dict['year']) # 将行数据字典加入到data列表中 data.append(row_data_dict) result = json.dumps(data,indent = 4,ensure_ascii=False) print(result) if __name__ == '__main__': readexcel(r'D:/CodeBase/ReadData/ReadExcel/excel_data.xlsx')
输出:
[ { "车牌号": "粤A123456", "设备号": 13645454412.0, "sim卡号": 13645454412.0, "设备类型": "A5C-8W", "所属车组": "测试", "车架号": 123.0, "服务密码": 123.0 } ]
注意:
json.dumps 进行序列化时,默认使用ascii编码, print json.dumps(data,indent = 4)输出unicode编码的结果,比如: {"u8f66u724cu53f7": "u7ca4A123456"}
json.dumps(data,indent = 4,ensure_ascii=False),不使用ascii编码,输出结果为:{"车牌号": "粤A123456"}
但是有时也碰到 json.dumps(data,indent = 4,ensure_ascii=False)之后依旧是乱码的格式,可采取下面方式处理:
import json dic = {"车牌号": "粤A123456"}print json.dumps(dic,ensure_ascii=False).decode("utf-8").encode("gb2312") #{"车牌号": "粤A123456"}