python读取excel数据转为json格式

林末
• 阅读 2097

做自动化时需要从excel读取数据; 本文实现将excel文件数据读取为json格式,方便自动化调用

读取xls文件

使用xlrd读取xls文件代码:

import xlrd


def read_xls(file):
    # 实例化excel
    book = xlrd.open_workbook(file)
    # 下标读取sheet
    sheet = book.sheet_by_index(1)
    # sheet name读取sheet
    # sheet = book.sheet_by_name('Sheet1')
    # 获取总行数
    nrows = sheet.nrows
    # 循环读取每行数据
    datas = []
    for i in range(1, nrows):
        # print(sheet.row_values(i))
        # 数据组装dic+t格式
        data = dict(zip(sheet.row_values(0), sheet.row_values(i)))
        datas.append(data)
    return datas

读取xlsx文件

因为xlrd只能读取xls,如遇到xlsx文件,需要使用openpyxl库读取,代码如下:

from openpyxl import load_workbook
def read_xlsx(file):
    # 加载文件
    book = load_workbook(file)
    # sheet name获取sheet:
    sheet = book['sheet1']
    # 获取总行数
    rows = sheet.max_row
    # 获取总列数
    # cols = sheet.max_column
    # print(rows)
    # 获取表头
    head = [row for row in sheet.iter_rows(min_row=1, max_row=1, values_only=True)][0]
    # 数据组装
    datas = []
    for row in sheet.iter_rows(min_row=2, max_row=rows + 1, values_only=True):
        data = dict(zip(head, row))
        datas.append(data)
    # print(datas)
    return datas

判断文件类型方法

最后根据文件后缀自动选择对应方法读取

def read_excel(file: str):
    if file.endswith('xls'):
        data = read_xls(file)
    elif file.endswith('xlsx'):
        data = read_xlsx(file)
    else:
        data = ['not support file']
    return data

最终代码

import xlrd
from openpyxl import load_workbook


def read_xls(file):
    # 实例化excel
    book = xlrd.open_workbook(file)
    # 下标读取sheet
    sheet = book.sheet_by_index(1)
    # sheet name读取sheet
    # sheet = book.sheet_by_name('Sheet1')
    # 获取总行数
    nrows = sheet.nrows
    # 循环读取每行数据
    datas = []
    for i in range(1, nrows):
        # print(sheet.row_values(i))
        # 数据组装dic+t格式
        data = dict(zip(sheet.row_values(0), sheet.row_values(i)))
        datas.append(data)
    return datas


def read_xlsx(file):
    # 加载文件
    book = load_workbook(file)
    # sheet name获取sheet:
    sheet = book['sheet1']
    # 获取总行数
    rows = sheet.max_row
    # 获取总列数
    # cols = sheet.max_column
    # print(rows)
    # 获取表头
    head = [row for row in sheet.iter_rows(min_row=1, max_row=1, values_only=True)][0]
    # 数据组装
    datas = []
    for row in sheet.iter_rows(min_row=2, max_row=rows + 1, values_only=True):
        data = dict(zip(head, row))
        datas.append(data)
    # print(datas)
    return datas
    # 获取单元格值:
    # Data = sheet.cell(row=row, column=col).value  # 获取表格内容,是从第一行第一列是从1开始的,注意不要丢掉 .value


def read_excel(file: str):
    if file.endswith('xls'):
        data = read_xls(file)
    elif file.endswith('xlsx'):
        data = read_xlsx(file)
    else:
        data = ['not support file']
    return data

End 林末 https://www.helloworld.net/linmo

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python 操作excel
python操作excel使用xlrd、xlwt和xlutils模块。xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的一、python 读取excelimportxlrdbookxlrd.open_workbook('all_stu.xls')打开一个excelsheetb
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
Python操作Excel
前言:Python操作Excel使用openpyxl模块,python中有好几个与excel相关操作的模块。xlrd库:从excel中读取数据,支持xls、xlsx格式。xlwt库:对excel进行修改操作,不支持对xlsx格式的修改。xlutils库:在xlrd和xlwd中对一个已存在的文件进行修改。openpyxl库:
Stella981 Stella981
2年前
Python之CSV模块
1\.CSV简介CSV(CommaSeparatedValues)是逗号分隔符文本格式,常用于Excel和数据库的导入和导出,Python标准库的CSV模块提供了读取和写入CSV格式文件的对象。1.1csv.reader对象和csv文件的读取
Stella981 Stella981
2年前
Python计算大文件行数方法及性能比较
如何使用Python快速高效地统计出大文件的总行数,下面是一些实现方法和性能的比较。1.readline读所有行使用readlines方法读取所有行:defreadline_count(file_name):returnlen(open(file_name).readlines())
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Python进阶者 Python进阶者
2个月前
读取设置密码保护的excel文件,有没有更好的办法?
大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【wen】问了一个Python处理Excel加密文件读取问题。问题如下:请教:读取设置了密码保护的exlce文件,dfpd.readexcel(file,password'12345
林末
林末
Lv1
男 · 软件工程师
Space moving engineer of regular cuboid solid matter 💻
文章
5
粉丝
1
获赞
4