利用 Python 处理 Excel 文件

作者: 匠人案牍 | 来源:发表于2020-01-14 13:53 被阅读0次

    使用场景

    日常办公的大多数场景都可能和数据打交道,此时我们第一个想到的便可能是 Excel,方便,简洁,拥有各种集合在一起的功能,相对而言其学习成本低一些。但对于一些专业性较强的行业来说,可能打开一个表格文件的时间已经可以喝一杯咖啡了,此时如果我们会使用脚本语言来处理文件,在时效上要快得多,本文将展示利用 openpyxl 来处理 excel 文件的功能,并且会结合一个小例子给出具体分析。

    功能展示

    基本准备工作

    首先是 openpyxl 的安装,查看 python 的官方网站,我们可以用 pip 安装:

    pip install openpyxl
    

    当然如果你用的是 Python 3,也可以这样:

    pip3 install openpyxl
    

    安装好 openpyxl 库后,我们可以新建一个 .py 文件,并做好一些初始化的准备:

    from openpyxl import load_workbook
    import datetime
    kaggleData = “Your_Excel_file_path” # 此处需要替换为你自己电脑上相应 excel 文件的位置
    wb = load_workbook(filename=kaggleData,read_only=True) # 请注意,如果只是读取文件,尽量把 read_only 这个参数设置为 True,这对于较大的 excel 文件来说会有很大的性能提升
    sheetNames = wb.sheetnames # 这将返回表格的所有表单名称,以列表形式
    

    写入一个 Excel 文件

    读取一个 Excel 文件的工作表,工作薄,每行每列及每个单元格

    读取一个 Excel 文件的工作簿

    “””读取每个工作表的名字,最大最小的行和列”””
    def sheetRange(sheetName):
        minRow = sheetName.min_row
        minCol = sheetName.min_column
        maxRow = sheetName.max_row
        maxCol = sheetName.max_column
        rowRange = 0
        columnRange = 0
        if minRow >= 1:
            rowRange = maxRow - minRow + 1 
        if minCol >= 1:
            columnRange = maxCol - minCol + 1
        print(sheetName.title + “ rowRange: “ + str(rowRange) + “,columnRange: “ + str(columnRange))
    

    读取某个指定的行
    对于数据的提取,有时可能需要用到某个指定的行,可以按照下面的方法操作:

    def typicalRow(sheetName,RowNumber): # sheetName 是工作簿的名字,RowNumber 是指要读取的指定行
        rowList = []
        minRow = sheetName.min_row
        minCol = sheetName.min_column
        maxRow = sheetName.max_row
        maxCol = sheetName.max_column
    “””以下是一些简单的保护代码,在实际操作时可能要考虑到更具体的意外情况”””
        if maxRow < 1:
            errorMessage = sheetName.title + “ 没有内容”
            print(errorMessage)
        elif RowNumber not in range(minRow,maxRow+1):
            errorMessage = “您要查找的第 “ + str(RowNumber) + “ 行超出工作表范围”
            print(errorMessage)
        else:
            for column in range(minCol,maxCol+1):
                cell = sheetName.cell(RowNumber,column)
                rowList.append(cell.value)
        if len(rowList):
            return rowList
    

    读取某个指定的列
    就像刚才提到的,有时需要读取某个指定的列,可参考下面的方法:

    def typicalColumn(sheetName,ColumnNumber):
        columnList = []
        minRow = sheetName.min_row
        minCol = sheetName.min_column
        maxRow = sheetName.max_row
        maxCol = sheetName.max_column   
        if maxCol < 1:
                errorMessage = sheetName.title + “ 没有内容”
                print(errorMessage)
        elif ColumnNumber not in range(minCol,maxCol+1):
            errorMessage = “您要查找的第 “ + str(ColumnNumber) + “ 列超出工作表范围”
            print(errorMessage)
        else:
            for row in range(minRow,maxRow+1):
                percentProcess = ‘{:.2%}’.format(row/maxRow) # 测试的文件有太多行,加入这一段代码显示进度
                message = "正在获取 " + sheetName.title + " 中的第 " + str(row) + " 行第 " + str(ColumnNumber) + " 列数据,共 " + str(maxRow) + "行,进度为 " + str(percentProcess) 
                print(message,end="\r")
                cell = sheetName.cell(row,ColumnNumber)
                columnList.append(cell.value)
        if len(columnList):
            return columnList
    

    案例分析

    自己用 Faker 库创建一些数据写入表格

    关注我,第一时间获取更多有意思的 Python 内容.

    匠人案牍.jpg

    相关文章

      网友评论

        本文标题:利用 Python 处理 Excel 文件

        本文链接:https://www.haomeiwen.com/subject/fzxaactx.html