欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用python对两张excel数据进行处理

程序员文章站 2022-05-18 17:19:34
...

本文使用到的技术点

  1. 使用pandas读取和写入exel;
  2. DataFrame类型转化为list
  3. difflib比较字符串的相似度
  4. python多线程
  5. 队列queue
import pandas as pd
import difflib
import queue
import threading
import time

time_start=time.time()
#a表读取
shanda_df=pd.read_excel('shanda.xlsx')
# data=df['ADH分泌过多综合征'].tolist()
# b表读取
hexin_df=pd.read_excel('hexin.xlsx')

hexin_data=[]
shanda_data=[]

# 遍历山大地纬dataframe插入list中,组成一个二元数组
for i in shanda_df.index.values:
    row_data=shanda_df.loc[i,['诊断ID','诊断名称']].tolist()
    shanda_data.append(row_data)

# 遍历核心dataframe插入list中,组成一个二元数组
for i in hexin_df.index.values:
    row_data=hexin_df.loc[i,['诊断ID','诊断名称']].tolist()
    hexin_data.append(row_data)

length=len(hexin_data)
sucs=[]
fail=[]
j=0

print('**************开始匹配****************')
# 多线程
def matchhx(arg):
    # 遍历核心list
    i=0
    for hexin in hexin_data:
        like = difflib.SequenceMatcher(None, arg[1], hexin[1]).quick_ratio()
        # 相似度大于0.7则匹配成功
        if like > 0.7:
            tem = []
            tem.append(arg[0])
            tem.append(arg[1])
            tem.append(hexin[0])
            tem.append(hexin[1])
            sucs.append(tem)
            break
        else:
            # 如果到最后一个还没有匹配到,则认为失败
            if i == length - 1:
                f = []
                f.append(arg[0])
                f.append(arg[1])
                fail.append(f)
        i += 1


que=queue.Queue(20)
# 遍历山大list
for shanda in shanda_data:
    # 创建线程执行函数
    t=threading.Thread(target=matchhx,args=(shanda,))
    t.start()
    que.put(t)
    # 计数器
    j += 1
    print('计数器', j)
    if que.full():
        for i in range(20):
            q=que.get()
            q.join()
        print('队列中的线程已经被执行完')






if not que.qsize():
    for i in range(que.qsize()):
        q = que.get()
        q.join()
        print('剩余线程已经被执行完')

print('****************************匹配结束*********************************')
time_end=time.time()
print('****************************匹配时间:{shijian}*********************************'.format(shijian=time_end-time_start))

sucs_df=pd.DataFrame(sucs)
fail_df=pd.DataFrame(fail)


sucs_df.to_excel('success.xlsx',sheet_name='比较成功')
fail_df.to_excel('fail.xlsx',sheet_name='比较失败')


相关标签: 案例