如题描述,如何根据自定义的worksheet读取工作表内容呢,对于参数化数据时如果能做到这个是有一定好处的。当然也有其他不同路径的处理方法也是可以的,想要过程完美需要时间打磨的呀。今天分享xlrd库的用法,根据自定义的sheet读取表格内容。
xlrd对Python3支持的版本建议使用xlrd==1.2.0,安装完成需要修改下源文件的iteration() 替换为iter() 一共两处。
下面是实现逻辑:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/1/12 16:55
# @Author : Wang jianhua
# @Site :
# @File : readCustomerData.py
# @Software: PyCharm
import xlrd
from commonUtils.Log import Log
class ReadExcelAllSheets:
'''读取指定工作表内容'''
def __init__(self,file_path):
'''
:param file 文件名
'''
self.work_file = xlrd.open_workbook(file_path)
self.sheet_name = self.work_file.sheet_names()
# 获取目录下所有Excel中sheet
def get_customer_sheet(self,worksheet=None): #默认全部
#遍历路径下的文件(暂时不用)
# for excel in os.listdir(data_path): # os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
# print("excel path:{}".format(excel))
# if excel.startswith('~'):
# break
# excelPath = os.path.join(data_path, excel) # 拼接路径
Log.info('All sheet: {}'.format(self.sheet_name))
# 循环从sheetNames中读取sheet表,返回sheet的内存地址
data = []
if worksheet==None: #如果等于None则读取全部sheet表内容
print("读取全部工作表内容")
for sheet in self.sheet_name:
table = self.work_file.sheet_by_name(sheet)
if table.nrows>1:
for j in range(1,table.nrows):
data.append(dict(zip(table.row_values(0), table.row_values(j)))) # 前面时key(默认首行),后面为每列对应的值
return data
else:
Log.info("表格为空")
else:
print("读取指定工作表内容")
for sheet in worksheet:
table = self.work_file.sheet_by_name(sheet)
if table.nrows >1:
for j in range(1,table.nrows): #
data.append(dict(zip(table.row_values(0), table.row_values(j)))) # 前面时key(默认首行),后面为每列对应的值
return data
else:
Log.info("表格为空")
file1="D:\test.xlsx"
worksheet=["Sheet1","Sheet2"]
print("指定sheet数据: {}".format(ReadExcelAllSheets(file1).get_customer_sheet(worksheet=worksheet)))
get_customer_sheet()该方法中的参数一定是list,因为工作表是list。如果是取一个工作表内容可以传入worksheet=["Sheet1"],默认可以不传,取全部工作表内容,详见代码。
这样在数据驱动时可以借鉴这种写法,欢迎吐槽,互相学习~~