自己完成的第二个自动化统计小程序,完成之后感觉:命名不够规范,造成可读性比较没那么好,幸好给自己很多地方都加了注释
#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. myeclipse经常弹出Subversion Native Library Not Available框解决办法

    两种解决方案:(1)在myeclipse中选择 "Windows" -> Perferences. 然后通过左上方的筛选,选出svn设置菜单,点解左侧的"SVN&q ...

  2. 重温Java JDK安装,希望帮助更多的学习在路上的小白

    JDK卸载和安装 现在JDK已经升级到JDK11版本了,但是JDK1.8(JDK8)仍然有很多小伙伴在使用,这里也记录一下jdk1.8的下载及安装过程,对于刚学习java的小伙伴可以参考,熟手可忽略, ...

  3. Redis底层数据结构实现

    REDIS  较宽泛的支持5种数据结构  分别为 字符串 列表 集合 散列 有序集合 关于这几种数据结构的使用 相信网上有很多资料,查看官网API 也很详细了  读者可以自己随意翻阅 很方便 . 接下 ...

  4. 死磕以太坊源码分析之MPT树-上

    死磕以太坊源码分析之MPT树-上 前缀树Trie 前缀树(又称字典树),通常来说,一个前缀树是用来存储字符串的.前缀树的每一个节点代表一个字符串(前缀).每一个节点会有多个子节点,通往不同子节点的路径 ...

  5. Docker学习(二)- Docker 安装 Jenkins

    一.拉取镜像 我这里安装的版本是2.222.3-centos,可以去这里获取你需要的版本: https://hub.docker.com/_/jenkins?tab=tags docker pull ...

  6. haproxy 里的超时

    haproxy 中的超时 客户端请求阶段 timeout client haproxy 和客户端通信时,连接不活跃的时间,既不发送数据,也不ack接收的数据 如果未设置,则永不超时,此时连接是否超时依 ...

  7. 《Go 语言并发之道》读后感 - 第一章

    <Go 语言并发之道>读后感 - 第一章 前言 人生路漫漫,总有一本书帮助你在某条道路上打通任督二脉,<Go 语言并发之道>就是我作为一个 Gopher 道路上的一本打通任督二 ...

  8. 接口的不同写法在Swagger上的不同

    接口请求方法类型 (1) 如果接口没有指定请求的 method 类型,例如 GET.POST.PUT.DELETE 等. Swagger中 (2)指定了请求方法后 Swagger中就只有一个GET请求 ...

  9. 用python做youtube自动化下载器 思路

    目录 0. 思路 1.准备 i.savfrom.net 2. 探索并规划获取方式 i.总览 ii. 获取该网页取到下载url的请求 iii. 在本地获取请求 iv.解析请求结果 v.解析解密后的结果 ...

  10. SpringBoot配置文件(2)

    六.配置文件加载 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件 file:./co ...