python学习-数据对比小工具

174 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

背景

因为北京疫情原因,5月在家居家办公,看到媳妇的一部分工作是核对两张excel的数据,询问发现,这类工作还很多,就像写个小程序来实现数据对比,本身做java的,但是java实现还得配置环境,对于使用者不太友好,运行也不太方便,决定使用python来写。仅仅做一个两个excel对比数据及替换的工作,在菜鸟教程中简单看看能够支撑开发功能的部分教程及excel对比需要用到的东西,不需要从头学起,在需要的知识点了解一下,简单完成了功能

环境搭建

Python官网:www.python.org/

在 Windows 设置环境变量

创建python_home,在path中添加%Python_HOME%

image.png

项目开发

Excel处理,首先引入xlwt和xlrd,命令如下

 pip install xlrd;
 pip install xlwt;

查看教程找到打开excel方法

#打开excel文件workbook = xlrd.open_workbook(filename)
​

获取sheet方法

#获取sheetsheet = workbook.sheet_by_name(sheetname)

获取行数列数

  # 表1的sheet的总行数
    rowNum1 = sheet1.nrows
    # 表1的sheet的总列数
    colNum1 = sheet1.ncols

创建新的excel

# xlwt准备生成一个新的文件
write_workbook = xlwt.Workbook()
write_sheet = write_workbook.add_sheet('sheet1', cell_overwrite_ok=True)

获取单元格数据

sheet.cell_value(row_index, col_index)

python基础 for循环及输入输出

for iterating_var in sequence:
    str = input("请输入表1要匹配的列索引:");
    print(str);

学习了这些知识点后,分析对比过程,

1.输入表1匹配的列索引和目标数据索引和表2匹配的列索引和目标数据索引(考虑到文件的行列不确定,由本人自行输入)(考虑到文件的行列不确定,由本人自行输入)

2.遍历表2的全部数据,把对应的单元设置到新的文件中,即复制了表2的数据到新表中

3.在遍历列过程中,如果碰到需要补充的字段,则进行遍历表1,判断的id索引匹配,

4.如果两个表的id相同则把表1的单元内容设置到新建表对应的单元格中

最后将文件打包称 exe可执行程序.命令如下:

pyinstaller -F importExcel.py

项目源码


import xlwt
import xlrd
if __name__ == '__main__':
    file1 = "E:\\importExcel\excel1.xlsx"//文件路径
    # 打开表1
    wb1 = xlrd.open_workbook(filename=file1)
    # 表1要匹配的列索引
    str = input("请输入表1要匹配的列索引:");
    hid_index1 = str #0
    # 表1目标数据列索引
    str2 = input("请输入表1目标数据列索引:");
    target_index1 = str2 #1
    # 表1的sheet
    sheet1 = wb1.sheet_by_index(0)
    # 表1的sheet的总行数
    rowNum1 = sheet1.nrows
    # 表1的sheet的总列数
    colNum1 = sheet1.ncols

    file2 = "E:\importExcel\excel2.xlsx" //文件路径
    # 打开表2
    wb2 = xlrd.open_workbook(filename=file2)  # 打开文件
    # 表2要匹配的列索引
    #hid_index2 = 0
    str3 = input("请输入表2要匹配的列索引:");
    hid_index2 = str3 #0
    # 表2目标数据列索引
    str4 = input("请输入表2目标数据列索引:");
    #target_index2 = 2
    target_index2 = str4
    # 表2的sheet
    sheet2 = wb2.sheet_by_index(0)  # 通过索引获取表格
    # 表2的sheet的总行数
    rowNum2 = sheet2.nrows

    # 表2的sheet的总列数
    colNum2 = sheet2.ncols

    # xlwt准备生成一个新的文件
    write_workbook = xlwt.Workbook()
    write_sheet = write_workbook.add_sheet('sheet1', cell_overwrite_ok=True)

    for index2 in range(0, rowNum2):
        for col_index in range(0, colNum2):

            # 遍历表2的每一行每一列,把对应的单元设置到新的文件中,即复制了表2的数据
            write_sheet.write(index2, col_index, sheet2.cell_value(index2, col_index))
            # 在遍历列过程中,如果碰到目标数据列索引.即需要补充的字段,则进行遍历表1,判断的id索引匹配

            if int(col_index) == int(target_index2) :
                for index1 in range(1, rowNum1):
                    hid1 = sheet1.cell_value(index1, int(hid_index1))

                    if hid1 == sheet2.cell_value(index2,int(hid_index2)):
                        # 如果两个表的id相同则把表1的单元内容设置到表2对应的单元格
                        write_sheet.write(index2, col_index, sheet1.cell_value(index1, int(target_index1)))
                        # 保存新的文件
    write_workbook.save('new.xls')

运行示例

输入展示:

image.png

运行结果:

image.png 🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!