1、编程环境

python3

  • 编辑器:PyCharm
  • 环境:anaconda3

使用的工具包

#用于调用excel文件的
import openpyxl
#用于正则比较的包
import re

2、主函数

if \__name__ == "\__main__":# targetSheet为需要输出统计结果的工作表,dataSheet为数据所在的工作表
# 提取excel文件
wb_targetSheet = openpyxl.load_workbook('D:/target.xlsx')
wb_dataSheet = openpyxl.load_workbook('D:/data.xlsx')
# 提取工作表
ws_targetSheet = getWorksheets(wb_targetSheet, "Sheetname")
ws_dataSheet = getWorksheets(wb_dataSheet, "Sheetname")# column_origin_targetSheet 统计表 原始结果所在列
# column_output_targetSheet 统计表 误识别统计结果输出列
target_column = targetColumn(n, n)#column_origin_targetSheet,column_output_targetSheet# column_origin_dataSheet 数据表 原始结果所在列
# column_tag_dataSheet 数据表 标注结果所在列
data_column = dataColumn(n, n)    # column_origin_dataSheet,column_tag_dataSheet# 统计表的各类数字统计所在列
# all = column_number[0] 统计表 提取总次数
# true = column_number[1] 统计表 识别正确数
# true_per = column_number[2] 统计表 识别正确占比
# false = column_number[3] 统计表 识别错误数
# false_per = column_number[4] 统计表 识别错误占比
# none = column_number[5] 统计表 无效次数
# none_per = column_number[6] 统计表 无效数据占比
column_number = param_number_return(n, n, n, n, n, n, n)# 统计识别结果的主函数,并返回错误的数组
# targetSheet_row 统计表 原始识别结果总行数
# dataSheet_row 数据表 标注结果总行数
# 本函数导入参数分别为:ws_targetSheet, ws_dataSheet, targetSheet_row, dataSheet_row, target_column, data_column
err_str = Statistics(ws_targetSheet, ws_dataSheet, n, n, target_column, data_column, column_number)# 在统计表第err_statistics行,输出 统计表原始结果无法识别的行
err_statistics = n
ws_targetSheet.cell(err_statistics, column=1).value = "原始结果无法识别行:"
ws_targetSheet.cell(err_statistics, column=2).value = err_str# 保存统计工作表,在此命令执行之前生成和修改的数据不会保存
wb_targetSheet.save('D:/target.xlsx')

3、整表处理函数

#输出全部误识别结果统计到指定xlsx的指定Sheet
#targetSheet_row:输出表的行数
#dataSheet_row:数据表的行数
def Statistics(ws_targetSheet, ws_dataSheet, targetSheet_row, dataSheet_row, target_column, data_column, column_number):column_origin_targetSheet = target_column[0]
column_output_targetSheet = target_column[1]
column_origin_dataSheet = data_column[0]
column_tag_dataSheet = data_column[1]all = column_number[0]
true = column_number[1]
true_per = column_number[2]
false = column_number[3]
false_per = column_number[4]
none = column_number[5]
none_per = column_number[6]# 用于存放无法识别的原始结果
err = {}
err_index = 0for i in range(2, targetSheet_row+1):err,err_index = getIdentificationNumber(ws_targetSheet, ws_dataSheet, i, dataSheet_row, column_origin_targetSheet, column_output_targetSheet, column_origin_dataSheet, column_tag_dataSheet, all, true, true_per, false, false_per, none, none_per, err, err_index)err_index -= 1
err_str = ''
for k in range(0, err_index + 1):err_str = err_str + str(err[k])if k != err_index:err_str = err_str + '、'return err_str

4、统计表单条数据分析

#单条原始识别结果的误识别分析
def getIdentificationNumber(ws_targetSheet, ws_dataSheet, targetSheet_row, dataSheet_row, column_origin_targetSheet, column_output_targetSheet, column_origin_dataSheet, column_tag_dataSheet, all, true, true_per, false, false_per, none, none_per, err, err_index):# 正则判断是否为时间格式文本,若为则需要处理
m = re.search(r'(\w)(\w)(:)(\w+)(:)(\w+)',str(ws_targetSheet.cell(row=targetSheet_row, column=column_origin_targetSheet).value))
if m != None and m.group(3) == ':' and m.group(5) == ':':ws_targetSheet.cell(row=targetSheet_row, column=column_origin_targetSheet).value = str(m.group(2)) + str(m.group(3)) + str(m.group(4))print('【' + str(targetSheet_row) + '】' + str(ws_targetSheet.cell(row=targetSheet_row, column=column_origin_targetSheet).value))# 音频误识别结果统计,结果放入a数组
# a[2 * a_index]:记录误识别结果字符串 str类型
# a[2 * a_index + 1]:记录每种误识别结果字符串数量 int类型
a = {}
a_index = 0# 统计正确、错误、无效数目
number_true = 0
number_false = 0
number_none = 0# 针对每一条原始识别结果,搜索所有相关标注结果
for i in range(2, dataSheet_row+1):if str(ws_dataSheet.cell(row=i, column=column_origin_dataSheet).value) == str(ws_targetSheet.cell(row=targetSheet_row, column=column_origin_targetSheet).value) \and str(ws_dataSheet.cell(row=i, column=column_origin_dataSheet).value) != str(ws_dataSheet.cell(row=i, column=column_tag_dataSheet).value) \and str(ws_dataSheet.cell(row=i, column=column_tag_dataSheet).value) != "/":number_false += 1Misidentification_repeat = 0for j in range(0, a_index):if ws_dataSheet.cell(row=i, column=column_tag_dataSheet).value == a[2 * j]:Misidentification_repeat += 1a[2 * j + 1] += 1else:Misidentification_repeat = Misidentification_repeatif Misidentification_repeat == 0:a[2 * a_index] = ws_dataSheet.cell(row=i, column=column_tag_dataSheet).valuea[2 * a_index + 1] = 1a_index += 1# 正确识别结果统计elif str(ws_dataSheet.cell(row=i, column=column_origin_dataSheet).value) == str(ws_targetSheet.cell(row=targetSheet_row, column=column_origin_targetSheet).value) \and str(ws_dataSheet.cell(row=i, column=column_origin_dataSheet).value) == str(ws_dataSheet.cell(row=i, column=column_tag_dataSheet).value):number_true += 1# 无效识别结果统计elif str(ws_dataSheet.cell(row=i, column=column_origin_dataSheet).value) == str(ws_targetSheet.cell(row=targetSheet_row, column=column_origin_targetSheet).value) \and str(ws_dataSheet.cell(row=i, column=column_tag_dataSheet).value) == "/":number_none += 1# 将a_index多加的一次减去,得到正确的a_index
a_index -= 1number_all = number_true + number_none + number_false
print(number_all, number_true, number_false, number_none)
if number_all != 0:ws_targetSheet.cell(row=targetSheet_row, column=all).value = number_allws_targetSheet.cell(row=targetSheet_row, column=true).value = number_truenumber_true_per = float(number_true) / float(number_all)ws_targetSheet.cell(row=targetSheet_row, column=true_per).value = number_true_perws_targetSheet.cell(row=targetSheet_row, column=false).value = number_falsenumber_false_per = float(number_false) / float(number_all)ws_targetSheet.cell(row=targetSheet_row, column=false_per).value = number_false_perws_targetSheet.cell(row=targetSheet_row, column=none).value = number_nonenumber_none_per = float(number_none) / float(number_all)ws_targetSheet.cell(row=targetSheet_row, column=none_per).value = number_none_per
else:err[err_index] = str(targetSheet_row)err_index += 1ws_targetSheet.cell(row=targetSheet_row, column=all).value = 0ws_targetSheet.cell(row=targetSheet_row, column=true).value = 0ws_targetSheet.cell(row=targetSheet_row, column=true_per).value = 0ws_targetSheet.cell(row=targetSheet_row, column=false).value = 0ws_targetSheet.cell(row=targetSheet_row, column=false_per).value = 0ws_targetSheet.cell(row=targetSheet_row, column=none).value = 0ws_targetSheet.cell(row=targetSheet_row, column=none_per).value = 0# 针对误识别条数进行排序
a = quickSort(arr=a, left=0, right=a_index)
# 从小到大排序
a = reverseSort(arr=a, left=0, right=a_index)# 输出误识别结果
a_str = ''
for k in range(0, a_index+1):a_str = a_str + str(a[2 * k]) + '(' + str(a[2 * k + 1]) + ')'if k != a_index:a_str = a_str + '、'
print(a_str + '\n')
ws_targetSheet.cell(row=targetSheet_row, column=column_output_targetSheet).value = a_strreturn err,err_index

5、快速排序算法

#快速排序算法

#快速排序算法
def quickSort( arr, left, right):left = 0 if not isinstance(left,(int, float)) else leftright = len(arr)-1 if not isinstance(right,(int, float)) else rightif left < right:partitionIndex = partition(arr, left, right)quickSort(arr, left, partitionIndex-1)quickSort(arr, partitionIndex+1, right)return arr

#分冶

#分冶法(配合实现本程序中的快速排序)
def partition(arr, left, right):pivot = leftindex = pivot+1i = indexwhile i <= right:if arr[2 * i + 1] < arr[2 * pivot + 1]:swap(arr, 2*i, 2*index)swap(arr, 2*i+1, 2*index+1)index += 1i += 1swap(arr, 2*pivot+1, 2*(index-1)+1)swap(arr, 2*pivot, 2*(index - 1))return index-1

#交换

#交换数组元素值(配合实现本程序中的快速排序)
def swap(arr, i, j):arr[i], arr[j] = arr[j], arr[i]

6、其他辅助函数

#倒序处理,从大到小排列
def reverseSort( arr, left, right):while left<right :temp = arr[2*left]arr[2 * left] = arr[2 * right]arr[2 * right] = temptemp = arr[2 * left + 1]arr[2 * left + 1] = arr[2 * right + 1]arr[2 * right + 1] = templeft += 1right -= 1return arr#从xlsx获得单张Sheet
def getWorksheets(wb,sheetname):ws = wb[sheetname]return ws#返回统计表的文本所处第几列
def targetColumn(column_origin_targetSheet, column_output_targetSheet):return column_origin_targetSheet, column_output_targetSheet#返回数据表的文本所处第几列
def dataColumn(column_origin_dataSheet, column_tag_dataSheet):return column_origin_dataSheet, column_tag_dataSheet#返回统计表的各类数字统计所在列
def param_number_return(all, true, true_per, false, false_per, none, none_per):return all, true, true_per, false, false_per, none, none_per

Python Excel处理脚本相关推荐

  1. 微软考虑将 Python 作为 Excel 官方脚本语言

    微软正考虑将 Python 作为 Excel 官方脚本语言之一,在 Excel 用户反馈平台中,「Python 作为 Excel 的脚本语言」成为了最热议的话题,是排名第二的提议的两倍多 目前为止,超 ...

  2. vba和python哪个好学-Python或将取代VBA,成为Excel官方脚本语言???

    原标题:Python或将取代VBA,成为Excel官方脚本语言??? 微软正考虑添加 Python 为官方的 Excel 脚本语言‍ 据外媒报道,微软正考虑添加 Python 为官方的一种 Excel ...

  3. 腾讯京东要建“反阿里联盟”?Python 或成 Excel 官方脚本语言;百度华为在一起 | 一周业界事

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 回顾刚刚过去的一周,百度刚与华为达成深度合作,李彦宏与余承东还相互交换了"信物&q ...

  4. 使用python开发宏_Python 如何开发 Excel 宏脚本

    Python 如何开发 Excel 宏脚本 发布时间:2020-09-23 11:00:45 来源:亿速云 阅读:84 作者:Leah 这期内容当中小编将会给大家带来有关Python 如何开发 Exc ...

  5. python处理excel表格实例-通过实例学习Python Excel操作

    这篇文章主要介绍了通过实例学习Python Excel操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.python 读取Excel # -* ...

  6. Python+Excel数据分析实战:军事体能考核成绩评定(一)项目概况

    一.技术背景 Excel(Microsoft office)是现在最常用的办公软件,主要涉及电子表格制作.数据处理.报表输出展示以及更高端的还有金融建模等:我们知道,在需要批处理多个Excel工作表以 ...

  7. 1分钟插入10亿行数据!抛弃Python,写脚本请使用Rust

      新智元报道   来源:Avinash 一位程序员急需在一分钟之内生成十亿行的测试数据库,然而在用Python写了脚本之后发现「大失败」.怎么办?当然是用Rust了! 于是,他做了一个所有程序员都会 ...

  8. mytrader-开源股票期货金融软件+支持C/C++/Python/Excel/VBA/麦语言的量化分析交易平台

    mytrader致力于为量化交易.算法交易.程序化交易以及技术分析爱好者打造最极致的行情分析交易平台. mytrader是一款基于ZQDB构建的量化分析交易平台. mytrader是绿色免安装版本,您 ...

  9. python excel 内容写入html,PYTHON读取EXCEL内容再转变成HTML添加到OUTLOOK中

    需求 读取excel里的表格里的内容,然后打开本机的outlook.把excel里的内容添加到正文里,注意.这里是要添加到正文!正文!正文!而不是添加到附件里 设计思路 1.excel处理 打开exc ...

最新文章

  1. 腾讯优图13篇论文入选ICCV2019,涉及2D图像多视图生成等研究
  2. Redis应用案例,查找某个值的范围(转)
  3. 三元组损失 Triplet Loss及其梯度
  4. spring中aop设计与实现
  5. Java工程中使用Log4j小记
  6. 成功解决urllib.error.URLError urlopen error Errno 11004 getaddrinfo failed
  7. [BZOJ1500][NOI2005]维修数列(splay)
  8. JavaScript DOM 编程艺术 --- JavaScript语法
  9. mysql英文介绍_每日科技英文48: MySQL C API简介
  10. 华为首款鸿蒙设备正式入网,华为首款鸿蒙设备正式入网:麒麟9000+挖孔全面屏,价格感人!...
  11. java+路径拦截实现_SpringBoot实现拦截器
  12. 11 CO配置-控制-成本中心会计-定义分割结构
  13. 阿里云服务器如何升级配置和降低配置?
  14. STM32F103ZET6 PWM输出
  15. ccfb类会议有哪些_CCF推荐国际学术会议
  16. 物联网平台发展的4个阶段和5个实践案例
  17. matlab 柯西黎曼方程,解析函数及柯西黎曼方程.ppt
  18. 斐讯路由器宽带运营商服务器,斐讯(PHICOMM)路由器设置网址
  19. 信奥中的数学 组合篇 相关资料汇总(2022.07.08)
  20. k8s pod基础概念

热门文章

  1. 第四届vex机器人亚洲锦标赛_2019第十三届VEX亚洲机器人锦标赛在韩国开赛
  2. Revit 中注释族的应用详解及公共族库工具
  3. raspberry pi_如何为复古游戏设置Raspberry Pi
  4. java文件预览_java 在线预览doc,pdf
  5. 尚硅谷前端项目开发笔记
  6. LinuxShell编程-脑洞实验-脚本小程序
  7. ZEN mining
  8. C# Winform开发 文件夹的删除
  9. NASA‘s Black Marble夜间灯光数据下载(wget下载)
  10. matlab2012仿真电路图,MATLAB电路仿真搭建教程