Python利用模糊查询两个excel文件数据 导出新表格

Python利用模糊查询两个excel文件数据 导出新表格

实际工作中,需要将两个excel表格中的数据进行模糊查询,最后将查询结果按照要求生成新的表格文件。
例如:领导安排了一个报表,需要将表2(缺陷查询数据导出.xls)中的厂站名称,缺陷描述对照表1(设备台账统计.xlsx)进行统计,表2的内容如下:

表2 缺陷查询数据导出.xls
再看看表1
表1  设备台账统计
具体要求是,对照表1厂站名称,按个对表2中的厂站名称进行查找,查找后再对照表1中间隔名称查找表2中缺陷描述内容,最后把有缺陷的内容按照表1的顺序重新生成一个表格(PS:本来想在表1中更新,学的不扎实,没搞出来)。手动查询,无奈表格数据达到几万条,泪奔!!!
进过两天学习,看大神的代码(大部分看不懂),基本完成目标,顺利解放小拇指,具体代码如下:

# code=utf-8
import xlrd
import xlwt
import time

xlsx_new = xlrd.open_workbook('设备台账统计.xlsx')
sheets_new = xlsx_new.sheet_by_index(1)  # 读取第二个表

xlsx_quexian = xlrd.open_workbook('缺陷查询数据导出.xls')
sheets_new_quexian = xlsx_quexian.sheet_by_index(1)

new_workbook = xlwt.Workbook()
worksheet = new_workbook.add_sheet('new_sheet')


xlsx1_row = sheets_new.nrows  # 读取表1总列数
xlsx2_row = sheets_new_quexian.nrows  # 读取表2总列数
all_date1 = []  # 存储表1数据,列表
all_date2 = []  # 存储表2数据,列表
quexian_huizong = ''

mun = 0  # 用于记录缺陷总数
mun1 = 0  # 用于记录当前执行表1中的次数
mun2 = 0  # 用于记录当前执行表2中的次数

print('表1总行数为:', xlsx1_row, '表2总行数为:', xlsx2_row, )
print('查询花费时间较长!!!!!''马上开始......')

time.sleep(1)  # 等待1秒
for i in range(3, xlsx1_row):  # 读取总的行数
    key_biandianzhan = sheets_new.cell(i, 1).value  # 读取表1中变电站名称
    key_jiangemingcheng = sheets_new.cell(i, 4).value  # 读取变电站间隔名称
    date1 = {'key_biandianzhan': key_biandianzhan, 'key_jiangemingcheng': key_jiangemingcheng}  # 设置字典
    all_date1.append(date1)  # 将表1中数据写入列表

print('表1数据复制成功!!!')
time.sleep(1)  # 等待1秒

for j in range(3, xlsx2_row):  # 表2总列数
    key_biandianzhan_quexian = sheets_new_quexian.cell(j, 5)  # 读取表2中变电站名称
    key_jiangemingcheng_quexian = sheets_new_quexian.cell(j, 7)  # 读取变电站缺陷

    date2 = {'key_biandianzhan_quexian': key_biandianzhan_quexian,
             'key_jiangemingcheng_quexian': key_jiangemingcheng_quexian}  # 将表2中数据写入字典
    all_date2.append(date2)

print('表2数据复制成功!!!')
time.sleep(1)  # 等待1秒
print('开始查询....................')

for l in all_date1:  # for循环从表1中提取变电站
    biandianzhan = l['key_biandianzhan']  # 将列表1中的数据赋值到变量biandianzhan
    jiangemingcheng = l['key_jiangemingcheng']  # 将列表1中的间隔名称赋值到jiangemingcheng
    mun1 = mun1 + 1
    print(biandianzhan)
    quexian_huizong = ''  #用于检测
    mun2 = 0
    for k in all_date2:  # for循环从第二个字典中提取数据
        biandianzhan_quexian = k['key_biandianzhan_quexian']  # 将列表2中变电站数据赋值到变量biandianzhan_quexian
        jiangemingcheng_quexian = k['key_jiangemingcheng_quexian']  # 将列表2中变电站数据赋值到变量jiangemingcheng_quexian
        mun2 = mun2 + 1  #
        if str(biandianzhan) in str(biandianzhan_quexian):  # 判断语句,判断表1中变电站名称在表2变电站名称,表1变电站名称相对表2变电站名称存在描述不全现象。
            if str(jiangemingcheng) in str(jiangemingcheng_quexian):  # 判断语句,判断表1中变电站间隔名称在包含在表2中缺陷描述。
                quexian_huizong = str(jiangemingcheng_quexian) + str(quexian_huizong)
                quexian_huizong = str(jiangemingcheng_quexian) + str(quexian_huizong)
                print('------总进度', mun1, '/', xlsx1_row, '        分进度', mun2, '/', xlsx2_row, '------')  # 打印判断进度
                mun = mun + 1  # 缺陷数量加1
                print('找到', mun, '条符合条件缺陷')  # 打印当前查到的缺陷数量
                print('变电站名称:',
                      biandianzhan, '缺陷描述:', jiangemingcheng_quexian)  # 打印当前查询到的变电站名称和缺陷描述

    worksheet.write(mun1,0,biandianzhan) #数据写入新的工作表
    worksheet.write(mun1,1,jiangemingcheng) #数据写入新的工作表
    worksheet.write(mun1,2,quexian_huizong) #数据写入新的工作表

new_workbook.save('生成数据.xls')
print('执行完毕!!!')

执行后在当前目录下生成新的excel文件,已经按照表2顺序对缺陷进行统计。
当然还是有部分内容没有完全搞清楚,字符串里面有个字典,怎么赋值,还有有没有其他的方法可以更加方便的实现该功能,希望大神不吝赐教。

记录于2020年2月26日

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值