遍历文件夹获取CRC校验码
来源:互联网 发布:车辆保险计算器软件 编辑:程序博客网 时间:2024/05/20 07:35
工作中需要提取车载的CRC校验码,文件数量比较大,手动提取较麻烦,临时用Pyhton写了一个CRC提取的小工具。`
#! /usr/bin/env python#coding=utf-8import wximport os.pathimport xlsxwriterimport reimport sysreload(sys)sys.setdefaultencoding('utf-8')class MainWindow(wx.Frame): def __init__(self,filename=u'CRC'): super(MainWindow, self).__init__(None, size=(650,650)) self.filename=filename self.opendir='.' self.savedir='.' self.traindatafile='' self.traindata='' self.lcofile=[] self.Train_list=[] self.allTrainlist=[] self.lcoInformation=[] self.CreateInteriorWindowComponents() self.CreateExteriorWindowComponents() def CreateInteriorWindowComponents(self): self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY) def CreateExteriorWindowComponents(self): self.CreateMenu() self.SetTitle() def SetTitle(self): super(MainWindow,self).SetTitle(u'CRC抓取工具') def CreateMenu(self): #菜单 Menu=wx.Menu() itemLoadCfg=Menu.Append(0,u'加载配置') itemSaveAs=Menu.Append(1,u'另存为') itemExit=Menu.Append(2,u'退出') self.Bind(wx.EVT_MENU,self.OpenFolder,itemLoadCfg) self.Bind(wx.EVT_MENU,self.SaveAs,itemSaveAs) self.Bind(wx.EVT_MENU,self.Exit,itemExit) ATPModuleMenu=wx.Menu() itemEvc=ATPModuleMenu.Append(4,u'EVC') itemAlm=ATPModuleMenu.Append(5,u'ALM') itemTmm=ATPModuleMenu.Append(6,u'TMM') itemBtm=ATPModuleMenu.Append(7,u'BTM') itemRim=ATPModuleMenu.Append(8,u'RIM') itemAutoRim=ATPModuleMenu.Append(9,u'自主RIM') self.Bind(wx.EVT_MENU,self.GetEvcCrc,itemEvc) self.Bind(wx.EVT_MENU,self.GetAlmCrc,itemAlm) self.Bind(wx.EVT_MENU,self.GetTmmCrc,itemTmm) self.Bind(wx.EVT_MENU,self.GetBtmCrc,itemBtm) self.Bind(wx.EVT_MENU,self.GetRimCrc,itemRim) self.Bind(wx.EVT_MENU,self.GetAutoRimCrc,itemAutoRim) menuBar=wx.MenuBar() menuBar.Append(Menu,u'菜单') menuBar.Append(ATPModuleMenu,u'ATP模块') self.SetMenuBar(menuBar) def GetEvcCrc(self,event): #清空 self.Train_list=[] self.allTrainlist=[] self.lcoInformation=[] self.lcoInformation=['evccfg_n.lco','evccfg_r.lco',r'\\M_evc\\M_ConfSB\\lco', 'CRC校验码_EVC模块_主系','CRC校验码_EVC模块_备系',8,8,2] self.control.AppendText(u'选择EVC模块!\n') def GetAlmCrc(self,event): #清空 self.Train_list=[] self.allTrainlist=[] self.lcoInformation=[] self.lcoInformation=['almcfg_n.lco','almcfg_r.lco',r'\\M_alm\\M_ConfSB\\lco', 'CRC校验码_ALM模块_主系','CRC校验码_ALM模块_备系',8,8,2] self.control.AppendText(u'选择ALM模块!\n') def GetTmmCrc(self,event): #清空 self.Train_list=[] self.allTrainlist=[] self.lcoInformation=[] self.lcoInformation=['tmmcfg_n.lco','tmmcfg_r.lco',r'\\M_tmm\\M_ConfSB\\lco', 'CRC校验码_TMM模块_主系','CRC校验码_TMM模块_备系',8,8,2] self.control.AppendText(u'选择TMM模块!\n') def GetBtmCrc(self,event): #清空 self.Train_list=[] self.allTrainlist=[] self.lcoInformation=[] self.lcoInformation=['btmCfg_1.lco','btmCfg_2.lco',r'\\M_BTM\\M_confsb\\lco', 'CRC校验码_BTM模块_主系','CRC校验码_BTM模块_备系',8,8,2] self.control.AppendText(u'选择BTM模块!\n') def GetRimCrc(self,event): #清空 self.Train_list=[] self.allTrainlist=[] self.lcoInformation=[] self.lcoInformation= ['rimcfg_a.lco','rimcfg_b.lco',r'\\M_rim\\M_ConfSB\\lco', 'CRC校验码_RIM模块_主系','CRC校验码_RIM模块_备系',8,8,2] self.control.AppendText(u'选择RIM模块!\n') def GetAutoRimCrc(self,event): #清空 self.Train_list=[] self.allTrainlist=[] self.lcoInformation=[] self.lcoInformation=['WLCU_cfg_A.dat','WLCU_cfg_B.dat',r'\\自主RIM配置文件_v\d+_\d+\\CR\w+_\d+_T[12]_v\d+', 'CRC校验码_自主RIM模块_主系','CRC校验码_自主RIM模块_备系',4,0,0] self.control.AppendText(u'选择自主RIM模块!\n') def defaultFolderStyle(self): return dict(message=u'选择文件夹', style=wx.DD_DEFAULT_STYLE) #打开配置文件夹 def OpenFolder(self,event): dirDialog=wx.DirDialog(self, message=u'选择文件夹',style=wx.DD_DEFAULT_STYLE) if dirDialog.ShowModal()==wx.ID_OK: self.opendir=dirDialog.GetPath() self.control.AppendText(u'配置文件路径:\n %s\n' %self.opendir) dirDialog.Destroy() #匹配列车型号 def MatchTrainData(self): #筛选出M_evc\M_consb\lco train_re=re.compile(r'CR\w+_\d+_T[12]') traindata=''.join(train_re.findall(self.traindatafile)) return traindata #是否匹配目标程序文件夹 def MatchDestinationFolder(self): matchFolder=re.compile(self.lcoInformation[2].encode('gbk')) isDesFolder=matchFolder.findall(self.traindatafile) return isDesFolder #每个字节之间添加一个空格(CRC共八个字节) def CrcAddSpace(self,file): crclist=[] #CRC八个字节 for i in range(0,self.lcoInformation[5]): byteCrc=file.read(1).encode('hex') crclist.append(byteCrc) return ' '.join(crclist) #遍历文件夹并生成list[车型,主系,备系] def SearchCrc(self): for lcofile in self.lcofile: if self.lcoInformation[0]==lcofile: list_n=[] f_n=open(os.path.join(self.traindatafile,self.lcoInformation[0]),'rb') f_n.seek(-self.lcoInformation[6],self.lcoInformation[7]) #crc_n=f_n.read(8) crc_n=self.CrcAddSpace(f_n) hex_crc_n=crc_n.upper() self.Train_list.append(hex_crc_n) f_n.close() if self.lcoInformation[1]==lcofile: f_r=open(os.path.join(self.traindatafile,self.lcoInformation[1]),'rb') f_r.seek(-self.lcoInformation[6],self.lcoInformation[7]) crc_r=self.CrcAddSpace(f_r) hex_crc_r=crc_r.upper() self.Train_list.append(hex_crc_r) f_r.close() # def GetCrc(self): for root,dirs,files in os.walk(self.opendir.encode('gbk'),False): self.traindatafile=root if self.MatchDestinationFolder(): self.Train_list=[self.MatchTrainData()] self.lcofile=files self.SearchCrc() self.allTrainlist.append(self.Train_list) return self.allTrainlist def WriteExcel(self): workbook=xlsxwriter.Workbook(os.path.join(self.savedir,self.filename+'.xlsx')) worksheet=workbook.add_worksheet() bold=workbook.add_format({'bold':True}) worksheet.write('A1',u'车型',bold) worksheet.set_column('A:A',25) worksheet.set_column('B:C',30) worksheet.write('B1',self.lcoInformation[3],bold) worksheet.write('C1',self.lcoInformation[4],bold) row=1 col=0 for trainNumber,master,servant in (self.GetCrc()): worksheet.write(row,col,trainNumber) worksheet.write(row,col+1,master) worksheet.write(row,col+2,servant) row+=1 workbook.close() self.control.AppendText(u'保存完毕,请查看!\n') def SaveAs(self,event): dialog=wx.FileDialog(self,message=u'选择文件', defaultDir=self.opendir,wildcard='(*.xlsx)|*.xlsx*') if dialog.ShowModal()==wx.ID_OK: self.filename=dialog.GetFilename() self.savedir=dialog.GetDirectory() self.control.AppendText(u'保存路径:\n %s\n' %self.savedir) dialog.Destroy() self.WriteExcel() def Exit(self,event): self.Close()app=wx.App()frame=MainWindow()frame.Show()app.MainLoop()
阅读全文
0 0
- 遍历文件夹获取CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- 实现CRC校验码
- CRC循环冗余校验码
- CRC循环冗余校验码
- java实现CRC校验码
- CRC计算校验码过程
- CRC校验码的源代码
- 如何计算CRC校验码
- CRC循环冗余校验码
- Linux CRC校验码
- CRC循环冗余校验码
- 循环冗余校验码CRC
- 关于协议学习的一点粗浅看法
- Java用freemarker导出word
- shiro授权入门程序
- oracle安装与碰到的问题
- myeclipse2015+struts+spring+hibernate spring-web-3.2.5 Unsupported module
- 遍历文件夹获取CRC校验码
- 面试问题(3)
- c++作业5
- 知识点学习
- HDU1072 Nightmare
- 深入剖析Tomcat-一个简单的servlet容器
- 46题
- APUE习题3.2----自己实现的dup2( )函数的源码
- Git命令使用笔记