python + xlrd 1.2.0封装读取excel数据

"""环境:python 3.7
pip install xlrd==1.2.0
ps:xlrd 新版本不支持读取xlsx文件
"""
import xlrd
#打开excel,注意文件路径
# excel=xlrd.open_workbook('test.xlsx')
# print(excel) #尝试打打印,不报错,就说明成功了
# #选择具体excel里面的sheet页
# sheet_name = excel.sheet_by_name('sheet页名称')#通过sheet页名称
# sheet_index = excel.sheet_by_index() #通过索引值来选择 索引值从0开始
# print(sheet_index,sheet_name) #尝试打印
# #读取表中的数据  ps:以下 sheet_name与sheet_index 只是以不同的方式打开文件,可都看错sheet
#     #读取行 索引从0开始row_values(行数)
# row = sheet_name.row_values(0)
# rows =sheet_name.nrows #获取总共有多少行
#     #读取列 col_values(列数)
# col = sheet_index.col_values()
#     #读取单元格 cell_value(行数,列数)
# cell = sheet_name.cell_value(0,1)
# print(row,col,cell)

"""封装读取excel,使用xlrd"""
class exceloperation():
    def __init__(self,filename):
        """初始化类,每次传入文件名
        :param filename: excel的路径
        """
        self.excel=xlrd.open_workbook(filename)
    def get_data_by_index(self,index):
        """
        通过index获取数据
        :param index:
        :return:
        """
        sheet =self.excel.sheet_by_index(index) #打开哪一个sheet页
        return self.get_info_data(sheet)
    def get_data_by_name(self,name):
        sheet=self.excel.sheet_by_name(name)
        return self.get_info_data(sheet)
    def get_info_data(self,sheet):
        """
        获取所有数据
        :param sheet:
        :return:
        """
        keys = sheet.row_values(0) #以第一行的数据作为key
        rows = sheet.nrows #获取所有行
        cols = sheet.ncols #获取所有列
        data_list=[] #定义一个空列表来接收数据
        for row in range(1,rows): #从第一行遍历行
            value_list=[] #定义空列表用来接收列值
            for col in range(cols):
                value=self.read_cell(sheet,row,col)
                value_list.append(value) #循环遍历列值并追加到value_list中
            tmp = zip(keys,value_list) #zip 函数,将获取的key,value重新生成一个元组
            data_list.append(dict(tmp)) #将元组转换成字典添加到列表中
        return data_list
    def read_cell(self,sheet,row,col):
        """
        处理单元格数据类型       excel数据类型          Python数据类型
        :param sheet: sheet页        1                       str
        :param row: 行               2                       整数
        :param col: 列               3                       时间
        :return:                     4                        布尔值
        ps:excel中数据类型与Python读取后的数据类型有一定的差异
        """
        sheet=self.excel.sheet_by_name('T')
        # sheet=self.excel.sheet_by_index(0)
        cell = sheet.cell_value(row,col) #获取单元格值
        cell_type = sheet.cell_type(row,col) #获取单元格值类型
        if cell_type==1:
            cell=cell #数据类型为1不做处理
        elif cell_type ==2 and cell % 1==0:
            cell =int(cell) #数据类型为2 python读取后为数字.0,所以强转为整数
        elif cell_type ==4:
            cell =True if cell==1 else False #三目运算符 excel中的True在python读取后展示为1,False为0。
        return cell

if __name__ == '__main__':
    oper = exceloperation(test.xlsx')
    data = oper.get_data_by_name('T') #调用函数 打开索引为0的sheet页,想打开哪一个就填对应的index
    print(data)

注意文件路径:这里我将excel与py文件放在一个目录里面 也可r'绝对路径' 

 这里T 是sheet页名称

时间类型的还没get到。。。。。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值