您当前的位置:首页 > 计算机 > 编程开发 > Python

python3 利用xlrd模块封装实现读取表格数据

时间:12-10来源:作者:点击数:

python3 利用xlrd模块封装实现读取表格数据

#!/usr/bin/env python
# coding=utf-8
# 封装实现读取表格数据
# 优化了xlrd中单元格的数据类型:
    '''
    数字一律按浮点型输出,日期输出成一串小数,布尔型输出0或1,所以我们必须在程序中做判断处理转换
    成我们想要的数据类型
    0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
    '''

import xlrd
from xlrd import xldate_as_tuple
import datetime

class ExcelUtil:
    # def __init__(self, excel_path, sheet_name):
    def __init__(self, excel_path):
        self.data = xlrd.open_workbook(excel_path)
        # 这个可以根据传入进来的sheet表名字来获取
        # self.table = self.data.sheet_by_name(sheet_name)
        # 直接获取第一个sheet表
        self.table = self.data.sheets()[0]
        # 获取第一行作为key值
        self.keys = self.table.row_values(0)
        # 获取总行数
        self.rowNum = self.table.nrows
        # 获取总列数
        self.colNum = self.table.ncols

    def dict_data(self):
        if self.rowNum <= 1:
            print("总行数小于1")
        else:
            r = []
            j = 1 # 第一行
            for i in range(self.rowNum - 1): # 减1防止越界,从第一行开始的,不是从0行开始,所以总数减1
                s = {}
                # 从第二行取对应values值
                values = self.table.row_values(j)
                for x in range(self.colNum): # x列
                    # 获取单元格数据类型
                    c_type = self.table.cell(j, x).ctype
                    # 获取单元格数据
                    c_cell = self.table.cell_value(j,x)
                    if c_type == 2 and c_cell % 1 == 0: # 如果是整形
                        values[x] = int(values[x])
                    elif c_type == 3: # 日期
                        # 转成datetime对象
                        date = datetime.datetime(*xldate_as_tuple(c_cell, 0))
                        values[x] = date.strftime('%Y/%d/%m %H:%M:%S')
                    elif c_type == 4: # 布尔类型
                        values[x] = True if c_cell == 1 else False
                    s[self.keys[x]] = values[x]
                r.append(s)
                j += 1
            return r

if __name__ == "__main__":
    # excel文件路径
    filePath = "./123.xlsx"
    # sheet表名字传参
    # sheetName = "企业在线产品列表"
    # data = ExcelUtil(filePath, sheetName)
    data = ExcelUtil(filePath)
    # 打印最后信息
    print(data.dict_data())

结果类似为:

[{'name': '欧罗', 'id1': 421.0, 'id2': 2437.0}, {'name': '欧罗', 'id1': 422.0, 'id2': 2443.0}]

xlrd详细介绍参照:https://www.cdsy.xyz/computer/programme/Python/241207/cd64837.html

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐