Python | xlrd模块-读Excel文件
Python操作Excel文件有三种方法
- 第三方库 xlwt/xlrd:用于生成和读取比较老的excel文件,比如xls格式,最大行数限制为65536行。其中xlrd是读excel,xlwt是写excel的库。
- 第三方库 openpyxl:用于生成2010之后新的excel文件,比如xlsx格式,最大行数限制为1048576行
- 第三方库 pandas:pandas是最强大的数据分析库,自带excel读取和生成模块
本文主要介绍xlrd模块
一、前置
1. 安装
- python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境
- 或者在cmd窗口 pip install xlrd
Python xlrd模块最新版本不支持.xlsx文件的解决办法 由于xlrd新的模块(2.0.1版本)已不支持.xlsx文件,因此需要卸载当前版本的xlrd库,安装1.2.0版本即可
- pip uninstall xlrd # 卸载当前版本
- pip install xlrd==1.2.0 # 安装1.2.0版本
2. 单元格的数据类型
- 空(empty):0
- 字符串:1
- 数字:2
- 日期:3
- 布尔:4
- error:5
- 空白表格(blank):6
二、操作
- 1.导入xlrd模块
- 2.打开Excel完成实例化
- 3.通过下标获取对应的表(也可通过标明获取)
- 4.通过列、行或者坐标获取表格的数据
1. 导入模块
import xlrd
2. 打开文件
data = xlrd.open_workbook(filename)
# 文件名以及路径,如果路径或者文件名有中文给前面加一个r原生字符。
# 打印 data = <xlrd.book.Book object at 0x035C97D0> 返回一个对象
3. sheet的操作
3-1. 获取book中的sheet
table_0 = data.sheets() table_1 = data.sheet_by_index(0) table_2 = data.sheet_by_name("userService") table_3 = data.sheet_names() table_4 = data.sheet_loaded(0) table_5 = data.nsheets print("获取所有sheet对象:",table_0) print("通过索引获取sheet对象:", table_1) print("打印sheet名称获取sheet对象:", table_2) print("获取所有sheet名称:", table_3) print("检查sheet是否导入完毕:", table_4) print("获取sheet数量:",table_5) ### 打印结果 ### 获取所有sheet对象: [<xlrd.sheet.Sheet object at 0x038E1ED0>, <xlrd.sheet.Sheet object at 0x038ED890>, <xlrd.sheet.Sheet object at 0x038ED4D0>] 通过索引获取sheet对象: <xlrd.sheet.Sheet object at 0x038E1ED0> 打印sheet名称获取sheet对象: <xlrd.sheet.Sheet object at 0x038E1ED0> 获取所有sheet名称: ['userService', 'devService', 'powerStationService'] 检查sheet是否导入完毕: True 获取sheet数量: 3
3-2. 获取sheet的汇总数据
table_1 = data.sheet_by_index(0) table_6 = table_1.name table_7 = table_1.nrows table_8 = table_1.ncols print("获取第一个sheet名称:" ,table_6) print("获取第一个sheet总行数:",table_7) print("获取第一个sheet总列数:",table_8) ### 打印结果 ### 获取第一个sheet名称: userService 获取第一个sheet总行数: 9 获取第一个sheet总列数: 13
4. 行的操作
data = xlrd.open_workbook(filename) table = data.sheet_by_name("userService") row_1 = table.row_values(0) row_2 = table.nrows row_3 = table.row_len(0) row_4 = table.row(0) row_5 = table.row_slice(0) row_6 = table.row_types(0) print("获取第一行所有内容,返回列表:",row_1) print("获取该sheet中的有效行数:",row_2) print("获取该sheet中第一行的单元格长度:",row_3) print("获取该列所有单元格值类型和内容组成的列表:",row_4) print("获取该列所有单元格值类型和内容组成的列表:",row_5) print("获取单元格数据类型:",row_6) ### 打印结果 ### 获取第一行所有内容,返回列表: ['用例编号', '模块', '接口名称', '优先级', '标题', 'URL', '前置条件', '请求方式', '请求头', '请求参数', '预期结果', '响应预期结果', '实际结果'] 获取该sheet中的有效行数: 9 获取该sheet中第一行的单元格长度: 13 获取该列所有单元格值类型和内容组成的列表: [text:'用例编号', text:'模块', text:'接口名称', text:'优先级', text:'标题', text:'URL', text:'前置条件', text:'请求方式', text:'请求头', text:'请求参数', text:'预期结果', text:'响应预期结果', text:'实际结果'] 获取该列所有单元格值类型和内容组成的列表: [text:'用例编号', text:'模块', text:'接口名称', text:'优先级', text:'标题', text:'URL', text:'前置条件', text:'请求方式', text:'请求头', text:'请求参数', text:'预期结果', text:'响应预期结果', text:'实际结果'] 获取单元格数据类型: array('B', [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
5. 列的操作
data = xlrd.open_workbook(filename) table = data.sheet_by_name("userService") col_1 = table.col_values(0, start_rowx=0, end_rowx=None) col_2 = table.ncols col_3 = table.col(0, start_rowx=0, end_rowx=None) col_4 = table.col_slice(0, start_rowx=0, end_rowx=None) col_5 = table.col_types(0, start_rowx=0, end_rowx=None) print("获取该列中所有单元格的数据组成的列表",col_1) print("获取列表的有效列数",col_2) print("获取该列中所有的单元格对象组成的列表",col_3) print("获取该列中所有的单元格对象组成的列表",col_4) print("获取该列中所有单元格的数据类型组成的列表",col_5) ### 打印结果 ### 获取该列中所有单元格的数据组成的列表 ['用例编号', 'login001', 'login002', 'login003', 'login004', 'login005', 'login006', 'getPsUser001', 'checkUserPassword001'] 获取列表的有效列数 13 获取该列中所有的单元格对象组成的列表 [text:'用例编号', text:'login001', text:'login002', text:'login003', text:'login004', text:'login005', text:'login006', text:'getPsUser001', text:'checkUserPassword001'] 获取该列中所有的单元格对象组成的列表 [text:'用例编号', text:'login001', text:'login002', text:'login003', text:'login004', text:'login005', text:'login006', text:'getPsUser001', text:'checkUserPassword001'] 获取该列中所有单元格的数据类型组成的列表 [1, 1, 1, 1, 1, 1, 1, 1, 1]
6. 单元格操作
data = xlrd.open_workbook(filename) table = data.sheet_by_name("userService") cell_1 = table.cell_value(0,0) cell_2 = table.cell(0,0) cell_3 = table.cell_type(0,0) print("获取单元格中的数据",cell_1) print("获取单元格对象",cell_2) print("获取单元格中的数据类型",cell_3) ### 打印结果 ### 获取单元格中的数据 用例编号 获取单元格对象 text:'用例编号' 获取单元格中的数据类型 1
7. 补充
data = xlrd.open_workbook(filename) table = data.sheet_by_name("userService") row_1 = table.row_values(0, 6, 10) # 取第1行,第6~10列(不含第10表),从0开始 col_1 = table.col_values(0, 0, 5) # 取第1列,第0~5行(不含第5行) row_2 = table.row_slice(2, 0, 2) # 获取单元格值类型和内容 row_3 = table.row_types(1, 0, 2) # 获取单元格数据类型 print(row_1) print(col_1) print(row_2) print(row_3) ### 打印结果 ### ['前置条件', '请求方式', '请求头', '请求参数'] ['用例编号', 'login001', 'login002', 'login003', 'login004'] [text:'login002', text:'userService'] array('B', [1, 1])
三、对批量的xcel进行操作
import os import xlrd def get_all_excel(): path_1 = os.path.dirname(os.path.abspath(__file__)) path = os.path.join(path_1,'excel_file') all_file = [] all_sn_data =[] for fi in os.listdir(path): f_name = os.path.join(path,fi) all_file.append(f_name) print(all_file) #所有文件的列表 for file in all_file: if os.path.isfile(file): data = xlrd.open_workbook(file) table = data.sheet_by_index(0) # 第一个sheet sn_data = table.col_values(0) # A列数据 all_sn_data.append(sn_data) all_data = sum(all_sn_data,[]) # 列表扁平化 print(all_data) get_all_excel()