自己完成的第二个自动化统计小程序,完成之后感觉:命名不够规范,造成可读性比较没那么好,幸好给自己很多地方都加了注释
#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. Redis 设计与实现 8:五大数据类型之哈希

    哈希对象的编码有两种:ziplist.hashtable. 编码一:ziplist ziplist 已经是我们的老朋友了,它一出现,那肯定就是为了节省内存啦.那么哈希对象是怎么用 ziplist 存储 ...

  2. 最实用的visual studio插件,值得收藏!

    1.ReSharper(VS必装,代码重构.代码修正功能) ReSharper 是一个JetBrains公司出品的著名的代码生成工具.其能帮助Microsoft Visual Studio成为一个更佳 ...

  3. vue element 表单验证不通过,滚动到固对应位置

    我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...

  4. mysql The used table type doesn’t support FULLTEXT indexes 解决方案 (phpstudy 会出现),coten不会

    mysql The used table type doesn't support FULLTEXT indexes 是不支持全文索引,解决方案: 1.停掉mysql服务2.打开my.ini,搜索de ...

  5. OpenTelemetry - 云原生下可观测性的新标准

    CNCF 简介 CNCF(Cloud Native Computing Foundation),中文为"云原生计算基金会",CNCF是Linux基金会旗下的基金会,可以理解为一个非 ...

  6. 查找linux系统下的端口被占用进程的两种方法 【转】

    在linux下开发时,你的软件可能要使用某一个端口,或者想查找某一个端口是否被占用.需要怎么做呢??这的确是一个比较烦恼的问题,我也此为这个苦恼过.但是通过查找man手册,还是同事的交流.总结出来两种 ...

  7. 【SpringBoot1.x】SpringBoot1.x 启动配置原理 和 自定义starter

    SpringBoot1.x 启动配置原理 和 自定义starter 启动配置原理 本节源码 启动过程主要为: new SpringApplication(sources) 创建 SpringAppli ...

  8. Flutter 应用入门:包管理

    pubspec.yaml name: flutter_combat description: A Flutter combat application. # The following defines ...

  9. 一文带你学会AQS和并发工具类的关系

    1. 存在的意义   AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实 ...

  10. (二)数据源处理2-xlrd操作excel

    import xlrd3workbook = xlrd3.open_workbook('test_data.xlsx')sheet =workbook.sheet_by_name('Sheet1')p ...