您的位置:首页 > 编程语言 > Python开发

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

2020-03-11 11:35 1296 查看

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

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


再看看表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日

  • 点赞
  • 收藏
  • 分享
  • 文章举报
wow 007 发布了6 篇原创文章 · 获赞 1 · 访问量 253 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐