自己完成的第二个自动化统计小程序,完成之后感觉:命名不够规范,造成可读性比较没那么好,幸好给自己很多地方都加了注释
#coding:utf-8
import os,sys
import re
import xlwt
import xlrd
import xlutils
import xlutils.copy
from xlutils.copy import copy
import pandas as pd
import numpy as np

import os.path
filedir = "E:/内部项目文档/2G SCAN/0617trc/二维码一维码同框.trc" #文件路径
f = open(filedir,'r',errors='ignore')
decodes = []
time = []
Filtertime = []
decoderesult = []
sheethead = ['解码次数','解码时间十六进制','解码时间十进制']
decode = open('decode.txt', 'w')
decodetime = open('decodetime.txt','w')
postFilter = open("postFilter.txt","w")
date = f.readlines() # 一次性读取所以行,并按行返回
f.close()
def find (keyword,file,x,y,list): #文件查找,传入参数:keyword:查找关键字,file;查找结果生成的文件名,list:查找结果生成的列表
for line in date:
if keyword in line:
print(line)
file.write(line)
list.append(line[x:y])
print(list)
file.close()
return file
return list
def getexcel(mylist,header):
book = xlwt.Workbook()
sheet = book.add_sheet("Sheet1",cell_overwrite_ok=True)
for k in range(len(header)) : # 根据列数遍历
sheet.write(0,k,header[k])
i =1 # 丛第一行开始,上面一行标题已经占了
for list in mylist: # 列表中的元组 mylist[0]
j = 0 #J 表示列
for data in list: #元素中的第一个索引开始 mylist[0][0]
sheet.write(i,j,data)
j += 1
i += 1
book.save("解码统计.xls")
#if __name__ == '__main__':
finddecode = find("number",decode,-2,-1,decodes)
findetime = find("80800",decodetime,-4,-1,time)
findetime = find("0x7654000",postFilter,-2,-1,Filtertime)
time = list(filter(lambda e:e!='000'and e!='001',time))
print(len(Filtertime))
print(len([e for e in Filtertime if int(e,16)>8] ))
print(time)
print(type(time[0]))
''' 用pandas制作filtertime表格'''
book2 = xlwt.Workbook()
sh = book2.add_sheet("sheet1",cell_overwrite_ok=True)
sh_head = ['Filtertime十六进制','Filtertime十进制']
for k in range(len(sh_head)):
sh.write(0,k,sh_head[k])#写表头
for m in range(len(Filtertime)):
j = 0
sh.write(m+1,j,Filtertime[m])
sh.write(m+1,j+1,int(Filtertime[m],16))
j += 1
m += 1
book2.save("Filtertime统计.xls")
df = pd.read_excel("Filtertime统计.xls")
result1 = df['Filtertime十进制'].describe().round(0) #Filtertime 的数据统计
print(result1)
pd.concat([df, result1]).to_excel("Filtertime统计.xls") #将统计结果和原表格内容重新保存到 表格中
print(len(decodes),len(time))
if len(decodes) == len(time): # 胖次解码次数和解码时间个数一样
decoderesult = list(zip(decodes,time))
getexcel(decoderesult,sheethead)
decodestatistical = xlrd.open_workbook("解码统计.xls") #打开表格
newdecodestatistical = copy(decodestatistical) #拷贝book生成一个新的表格作为填写基础
tabel1 = decodestatistical.sheet_by_name(u"Sheet1")#通过sheet_by_index()获取的sheet没有write()方法
newtabel1 = newdecodestatistical.get_sheet(0) #用get_sheet()获取的sheet有write()方法
#获取表格的行数和列数
nclos = tabel1.ncols
nrows = tabel1.nrows
for i in range(1,nrows):
newtabel1.write(i,nclos-1,int(tabel1.cell(i,1).value,16))

newdecodestatistical.save("解码统计.xls")

''' 利用pandas 自动数据统计'''
df2 = pd.read_excel("解码统计.xls")
result2 =df2['解码时间十进制'].describe().round(0) # 解码时间的数据统计,保留1个小数点
print(result2)
failcount = len(df2[df2['解码次数']==0])
print(failcount)
result2.loc['失败次数']=failcount # 统计的结果添加一行 失败的次数
pd.concat([df2, result2]).to_excel("解码统计.xls")
else:
print('解码次数和时间不一致,结果查看:解码.xls')
write = pd.ExcelWriter(r'D:/untitled3/解码.xls') #定义一个表格作为写入,类似文件open
date1 =pd.read_table('decode.txt',sep = ' ',header=None,engine = 'python',encoding = 'utf8') # log提取的decodenumber解码结果pandas读取
print(date1.columns)
x = [1,2,3,4,5,6,7,8,9] # 要删除的列索引,只保留第一列;系统时间,最后一列:解码结果
date1.drop(date1.columns[x],axis=1,inplace=True)
print(date1.columns)
date1.columns=['time','decodemuner']
print(date1)
date1.to_excel(write,sheet_name='sheet1') # 保存到表的sheet1
date2 =pd.read_table('decodetime.txt',sep = ' ',header=None,engine = 'python',encoding = 'utf8')#log提取的event 时间pandas读取
print(date2.columns)
x = [1,2,3,4,5,6,7,8,9,10,11,12] # 要删除的列索引,只保留第一列;系统时间,最后一列:0x0800时间
date2.drop(date2.columns[x],axis=1,inplace=True)
print(date2.columns)
date2.columns=['time','hexevent']
print(date2)
date2.to_excel(write,sheet_name='sheet2') # 保存到表的sheet2
write.save()
write.close()
df1 =pd.DataFrame(pd.read_excel('解码.xls',sheet_name='sheet1')) #表格转为dateFrame表达
df2 =pd.DataFrame(pd.read_excel('解码.xls',sheet_name='sheet2'))
print(df1)
print(df2)
result = pd.merge(df1,df2.loc[:,['time','hexevent']],how='left',on='time') #提取time相同的是内容,实现表格的vlookup功能
result=result.dropna(axis=0,how='any') # 删除表中包含NAN的行
print (result)
evnet = result['hexevent']
print(evnet)
hexevent=np.array(evnet)
print(hexevent)
print(type(hexevent))
decevent=[] #evet 对应十进制
for i in range(len(hexevent)):
hexevent[i] =hexevent[i][-3:] #取最后3位
decevent.append(int(hexevent[i],16))
print(decevent)
col_name=result.columns.tolist()# 查询当前列的索
print(col_name)
col_name.insert(4,'解码十进制时间') #添加新的列名
print(col_name)
result['解码十进制时间'] = decevent
print(result)
tongji = result['解码十进制时间'].describe().round(0)
print(tongji)
failcount = len(result[result['decodemuner']==0]) # 统计界面失败的个数
print(len)
tongji.loc['失败次数']=failcount
pd.concat([result,tongji]).to_excel("解码.xls")

采用pandas读取文件,进行自动化统计小程序的更多相关文章

  1. Pandas读取文件报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 0: invalid start byte

    pandas读取文件时报UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 0: invalid start by ...

  2. python(三)一个文件读写操作的小程序

    我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...

  3. Pandas读取文件

    如何使用pandas的read_csv模块以及其他读取文件的模块?? 一起来看一看 Pandas中read_csv和read_table的区别 注:使用pandas读取文件格式为pandas特有的da ...

  4. 【学习笔记】C#中HashTable和快速排序的用法,从单词频率统计小程序写起

    先瞎扯点别的.进入这个神圣的地方总需要些鞭策,阿西巴,我是被鞭策进来摆摊的程序猿.软件工程老师说,写程序,发博客,就来博客园.这是个号召力很强的口号.最近看网络营销 搜索引擎优化的书多一些,只能说王老 ...

  5. 词频统计小程序-WordCount.exe

    一. 背景 ​ 最近顶哥为了完成学历提升学业中的小作业,做了一个词频统计的.exe小程序.因为当时做的时候网上的比较少,因此顶哥决定把自己拙略的作品发出来给需要的人提供一种思路,希望各位看官不要dis ...

  6. python--代码统计小程序

    有人说,大学生在校期间要码够10W行代码,也有人说,看的不是写代码的行数,而是修改代码的行数... 不管谁说,说的人都挺牛的 咳,首先给自己定个小目标吧,5W行代码!成天写代码,啥时候到5W呢?为了更 ...

  7. Python绘制PDF文件~超简单的小程序

    Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...

  8. less文件编译成微信小程序wxss文件

    2016年9月21日,微信小程序正式开启内测.在微信生态下,触手可及.用完即走的微信小程序引起广泛关注,刷爆朋友圈子.在这样的火爆氛围中,作为一个前端开发者的我,也悄悄地去尝鲜.在做demo小示例的过 ...

  9. pandas 读取文件

    import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('G:timeCompare.txt', sep=' ', ...

随机推荐

  1. Linux嵌入式学习-交叉编译openssl

    利用arm-none-linux-gnueabi-gcc交叉编译openssl,生成静态库文件libcrypto.a ,libssl.a 1.从openssl官网下载openssl最新版本,我下载的是 ...

  2. mysql提权神器

    java -jar udf.jar 127.0.0.1 root 123456 [32/64]

  3. 盘点 Java 开发 2020 年发生的几件大事,你必须得知道!

    2021 年了,在过去的一年 Java 软件开发行业都发生了哪些重大事件呢? 这篇栈长带大家回顾一下,其实在元旦的<滚蛋吧,2020>也略有介绍,这篇就更加详细的总结一下. 1.Java ...

  4. 第一章节 BJROBOT ROS 网络配置及移动控制【ROS全开源阿克曼转向智能网联无人驾驶车】

    版权声明:该教程版权归北京智能佳科技有限公司所有,未经公司授权禁止引用.发布.转载等,否则将追究其法律责任. 使用前说明:本使用文档说明略微简明,请结合指导视频进行操作会更容易理解!! 第一章节 BJ ...

  5. node.js常用内置模块一

    在使用内模块的时候需要先将所需的内置模块进行引入. OS模块 在nodejs中OS模块提供了与操作系统相关的属性和方法 // 导入OS内置模块,必须先进行导入,否则无法使用 const os = re ...

  6. Redis集群搭建与简单使用【转】

    Redis集群搭建与简单使用 安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. 两台虚拟机都 ...

  7. python -c 妙用

    前言 python -c 命令还是有用的哈 正文 python的 -c 可以在命令行中调用 python 代码, 实际上 -c 就是 command 的意思 官方文档中解释为(节选自: python ...

  8. Java线程安全与锁优化,锁消除,锁粗化,锁升级

    线程安全的定义 来自<Java高并发实战>"当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法的时候进行任何 ...

  9. sa-token 之权限验证

    权限验证 核心思想 所谓权限验证,验证的核心就是当前账号是否拥有一个权限码 有:就让你通过.没有:那么禁止访问 再往底了说,就是每个账号都会拥有一个权限码集合,我来验证这个集合中是否包括我需要检测的那 ...

  10. 【Software Test】Introduction to Software Testing

    Introduction to Software Testing 文章目录 Going to Learn --. Evolution of The Software Industry Errors, ...