精华内容
下载资源
问答
  • 文本比对源代码-LCS

    2010-04-14 16:48:33
    借助LCS算法实现文本文档比对,可以自行扩展支持word等格式文件
  • Python3实现两个Excel文件内容比对

    千次阅读 2018-07-03 17:49:09
    最近在工作中,需要人工比对大量的excel格式报表,刚好刚学了Pyhon入门基础知识,想着写个东西练练手,不但能提高代码编写能力,还能减轻工作量,提高工作效率。说干就干,简单的理了逻辑。首先,将目标表和源表的...

    最近在工作中,需要人工比对大量的excel格式报表,刚好刚学了Pyhon入门基础知识,想着写个东西练练手,不但能提高代码编写能力,还能减轻工作量,提高工作效率。说干就干,简单的理了逻辑。首先,将目标表和源表的内容分别写入到字典中,Excel表中不确定有没有字段是唯一值,所以选择了行号作为key值,一行的内容放到list中,然后从源表中取一行去目标表中遍历。想好之后开始敲代码了,在代码编写过程中遇到很多的问题,都是遇到一个查一个。基本的比对功能实现后,就想着在加个日志记录下比对结果。写下此文记录下,just do it.
    下面是全部代码

    #-*- coding: utf-8 -*-
    
    #比对两个Excel文件内容的差异
    #---------------------假设条件----------------
    #1、源表和目标表格式一致
    #2、不存在合并单元格
    #3、第2行开始比对
    #---------------------------------------------
    
    import xlrd
    import xlwt
    import os
    import time;  # 引入time模块
    
    #往日志文件中追加内容函数
    def writeappend_logfile(filename,content):
        file=open(filename,'a') #以追加方式打开日志文件
        time_now= time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  #系统时间格式化
        file.writelines(time_now+':'+content+'\n')      #写入内容
        file.close() #关闭文件
    
    def read_excel(ori_path,tar_path,sub_name):#
        success=0        #匹配一致数量
        fail=0           #匹配不一致数量
        origin_xls={} #存储源xls文件
        target_xls={} #比对的xls文件
        wb_ori=xlrd.open_workbook(ori_path) #打开原始文件
        wb_tar=xlrd.open_workbook(tar_path) #打开目标文件
        sheet_num = len(wb_ori.sheets()) #源表子表数量
    ##    for sheet_i in range(sheet_num):  #excel中子页面数量
    ##        sheet_ori=wb_ori.sheet_by_index(sheet_i) #通过索引值获取源表名
    ##        sheet_tar=wb_tar.sheet_by_index(sheet_i) #通过索引值获取源表名
    
        startime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())    #获取系统当前时间并格式化为格式
        print (startime,' 开始比对...')
        logname='log_'+startime[0:10]+'.log'               #截取日期年月日构成日志文件名
    
        logfile=open(logname,'w')    #创建日志文件,如果文件存在则清空内容,不存在则创建,如果需要同时批量比对多张表,可以考虑将日志文件名作为参数传入
        logfile.writelines(startime+':【开始比对】...'+'\n')       #写入开始时间
        logfile.close()            #关闭日志文件
    
        try:
            sheet_ori=wb_ori.sheet_by_name(sub_name)
            sheet_tar=wb_tar.sheet_by_name(sub_name)
            if sheet_ori.name==sheet_tar.name:
                #sheet表名
                if sheet_ori.name==sub_name:
                #先将数存入dictionary中dictionary(rows:list)
                #第一行存储表头
                #源表取一行数据与目标表全表进行比对如果表中存在主键可以用主键进行索引
                #数据从excel第3行开始
                    for rows in range(1,sheet_ori.nrows):
                        orign_list=sheet_ori.row_values(rows) #源表i行数据
                        target_list=sheet_tar.row_values(rows) #目标表i行数据
                        origin_xls[rows]=orign_list     #源表写入字典
                        target_xls[rows]=target_list    #目标表写入字典
    
                    if origin_xls[1]  == target_xls[1]:
                        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' 表头一致')
                    for ori_num in origin_xls:
                        flag='false'          #判断是否一致标志
                        for tar_num in target_xls:
                            if origin_xls[ori_num]==target_xls[tar_num]:
                                flag='true'
                                break              #如果匹配到结果退出循环
                        if flag=='true':           #匹配上结果输出后台日志
                            print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' row:%d is ok'%ori_num)
                            success+=1
                        else:                      #匹配不上将源表中行记录写入txt
                            print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' row:%d is different'%ori_num)
                            fail+=1
                            data=origin_xls[ori_num]
                            logstr='【不一致】row<'+str(ori_num)+'>:'+str(data)
                            writeappend_logfile(logname,logstr)
                   # logstr='【比对完成】总记录数:'+str(ori_num)+'条,一致:'+str(success)+'条,不一致:'+str(fail)+'条'
                    logstr='【比对完成】总记录数:{:d}条,一致:{:d}条,不一致:{:d}条'.format(ori_num,success,fail)
                    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' 【%s】比对结束'%sheet_ori.name)
                    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' 总记录数:%d条,一致:%d条,不一致:%d条'%(ori_num,success,fail))
                    writeappend_logfile(logname,logstr)
    
            else:
                errmsg='【'+sub_name+'】子表名不一致'
                writeappend_logfile(logname,errmsg)
        except Exception as err:
           writeappend_logfile(logname,str(err)) #输出异常
    
    def main():
        pass
    
    if __name__ == '__main__':
    
        read_excel(r'2.xls',1.xls','sheet1')
    

    转载于:https://blog.51cto.com/13777112/2135708

    展开全文
  • 最近在工作中,需要人工比对大量的excel格式报表,刚好刚学了Pyhon入门基础知识,想着写个东西练练手,不但能提高代码编写能力,还能减轻工作量,提高工作效率。说干就干,简单的理了逻辑。首先,将目标表和源表的...

    最近在工作中,需要人工比对大量的excel格式报表,刚好刚学了Pyhon入门基础知识,想着写个东西练练手,不但能提高代码编写能力,还能减轻工作量,提高工作效率。说干就干,简单的理了逻辑。首先,将目标表和源表的内容分别写入到字典中,Excel表中不确定有没有字段是唯一值,所以选择了行号作为key值,一行的内容放到list中,然后从源表中取一行去目标表中遍历。想好之后开始敲代码了,在代码编写过程中遇到很多的问题,都是遇到一个查一个。基本的比对功能实现后,就想着在加个日志记录下比对结果。写下此文记录下,just do it.

    下面是全部代码

    #-*- coding: utf-8 -*-

    #比对两个Excel文件内容的差异

    #---------------------假设条件----------------

    #1、源表和目标表格式一致

    #2、不存在合并单元格

    #3、第2行开始比对

    #---------------------------------------------

    import xlrd

    import xlwt

    import os

    import time; # 引入time模块

    #往日志文件中追加内容函数

    def writeappend_logfile(filename,content):

    file=open(filename,"a") #以追加方式打开日志文件

    time_now= time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #系统时间格式化

    file.writelines(time_now+":"+content+" ") #写入内容

    file.close() #关闭文件

    def read_excel(ori_path,tar_path,sub_name):#

    success=0 #匹配一致数量

    fail=0 #匹配不一致数量

    origin_xls={} #存储源xls文件

    target_xls={} #比对的xls文件

    wb_ori=xlrd.open_workbook(ori_path) #打开原始文件

    wb_tar=xlrd.open_workbook(tar_path) #打开目标文件

    sheet_num = len(wb_ori.sheets()) #源表子表数量

    ## for sheet_i in range(sheet_num): #excel中子页面数量

    ## sheet_ori=wb_ori.sheet_by_index(sheet_i) #通过索引值获取源表名

    ## sheet_tar=wb_tar.sheet_by_index(sheet_i) #通过索引值获取源表名

    startime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #获取系统当前时间并格式化为格式

    print (startime," 开始比对...")

    logname="log_"+startime[0:10]+".log" #截取日期年月日构成日志文件名

    logfile=open(logname,"w") #创建日志文件,如果文件存在则清空内容,不存在则创建,如果需要同时批量比对多张表,可以考虑将日志文件名作为参数传入

    logfile.writelines(startime+":【开始比对】..."+" ") #写入开始时间

    logfile.close() #关闭日志文件

    try:

    sheet_ori=wb_ori.sheet_by_name(sub_name)

    sheet_tar=wb_tar.sheet_by_name(sub_name)

    if sheet_ori.name==sheet_tar.name:

    #sheet表名

    if sheet_ori.name==sub_name:

    #先将数存入dictionary中dictionary(rows:list)

    #第一行存储表头

    #源表取一行数据与目标表全表进行比对如果表中存在主键可以用主键进行索引

    #数据从excel第3行开始

    for rows in range(1,sheet_ori.nrows):

    orign_list=sheet_ori.row_values(rows) #源表i行数据

    target_list=sheet_tar.row_values(rows) #目标表i行数据

    origin_xls[rows]=orign_list #源表写入字典

    target_xls[rows]=target_list #目标表写入字典

    if origin_xls[1] == target_xls[1]:

    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" 表头一致")

    for ori_num in origin_xls:

    flag="false" #判断是否一致标志

    for tar_num in target_xls:

    if origin_xls[ori_num]==target_xls[tar_num]:

    flag="true"

    break #如果匹配到结果退出循环

    if flag=="true": #匹配上结果输出后台日志

    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" row:%d is ok"%ori_num)

    success+=1

    else: #匹配不上将源表中行记录写入txt

    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" row:%d is different"%ori_num)

    fail+=1

    data=origin_xls[ori_num]

    logstr="【不一致】row<"+str(ori_num)+">:"+str(data)

    writeappend_logfile(logname,logstr)

    # logstr="【比对完成】总记录数:"+str(ori_num)+"条,一致:"+str(success)+"条,不一致:"+str(fail)+"条"

    logstr="【比对完成】总记录数:{:d}条,一致:{:d}条,不一致:{:d}条".format(ori_num,success,fail)

    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" 【%s】比对结束"%sheet_ori.name)

    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" 总记录数:%d条,一致:%d条,不一致:%d条"%(ori_num,success,fail))

    writeappend_logfile(logname,logstr)

    else:

    errmsg="【"+sub_name+"】子表名不一致"

    writeappend_logfile(logname,errmsg)

    except Exception as err:

    writeappend_logfile(logname,str(err)) #输出异常

    def main():

    pass

    if __name__ == "__main__":

    read_excel(r"2.xls",1.xls","sheet1")

    展开全文
  • 采用文件二进制比对的方式查杀电脑上的文件,可以对电脑文件中含有病毒特征码的文件执行删除文件、清除文件病毒码字节、用空格替换文件病毒码字节、用0x00替换文件病毒码字节,用指定字符替换文件病毒码字节等等杀毒...
  • 这里只检测了主要的内核模块nkrnlpa**.exe的.win32k.sys,hal.dll,比对它们的原始文件从而查找eat inline hook,iat hook ,和inline hook。Inline是从TEXT段开始一段位置开始比较的。(有点慢貌似,等待显示扫描...
  • 这个源代码个人感觉比较不错,可以比对两个Excel表格内容的差异性,虽然我们不经常用到这种功能,但经常从事表格制作、数据录入、数据转换的朋友来说,这个还是挺实用的,它以直观的方式显示出不同表段、不同表格...
  • 需要实现准备一份未受感染的源代码和一份可能受感染的源代码,然后运行以下脚本,就能找出到底哪些文件被挂马了。 其中,主要是根据比对2份文件的md5值来过滤可能被挂马的文件(确切的说应该是被修改过的文件) ...
  • 第二篇讲解指纹模式识别系统算法,包括指纹模式识别预处理和指纹图像特征提取与比对源代码实现;第三篇讲解如何亲手打造指纹模式识别系统,带领读者制作一个指纹模式识别系统的软硬件系统;第四篇讲解指纹模式识别...
  • 需要实现准备一份未受感染的源代码和一份可能受感染的源代码,然后运行以下脚本,就能找出到底哪些文件被挂马了。 其中,主要是根据比对2份文件的md5值来过滤可能被挂马的文件(确切的说应该是被修改过的文件) ...

    网站被入侵,担心被挂马,因此就想自己写个脚本来查找那些被挂马的文件

    思路

    需要实现准备一份未受感染的源代码和一份可能受感染的源代码,然后运行以下脚本,就能找出到底哪些文件被挂马了。

    其中,主要是根据比对2份文件的md5值来过滤可能被挂马的文件(确切的说应该是被修改过的文件)

    Python脚本

    __author__ = 'Flying'
    #coding:utf-8
    #Date:2014.6.5
    #检测修改过的文件
    import os,sys,hashlib,datetime
    global_DirOld = ""
    global_DirNew = ""
    global_FilesList = []
    #输入要比对的文件路径
    def InputDirPath():
        global global_DirOld,global_DirNew
        global_DirOld = unicode(raw_input("请输入备份文件所在目录:"),"utf-8")
        while not os.path.exists(global_DirOld):
            print  u"指定的路径不存在,请重新输入"
            global_DirOld = unicode(raw_input("请输入备份文件所在目录:"),"utf-8")
        global_DirNew = unicode(raw_input("请输入要检测文件的目录:"),"utf-8")
        while not os.path.exists(global_DirNew):
            print  u"指定的路径不存在,请重新输入"
            global_DirNew = unicode(raw_input("请输入要检测文件的目录:"),"utf-8")
    
    #将数据保存到文件中
    def SaveToFile(filePath,content):
        try:
            f = open(filePath,"a+")
            f.write(content.encode("utf-8") + "\n")
            f.close()
        except Exception,ex:
            print "Error:" + str(ex)
    
    #计算文件的MD5值
    def CalcMD5(filepath):
        try:
            #以二进制的形式打开
            with open(filepath,'rb') as f:
                md5obj = hashlib.md5()
                md5obj.update(f.read())
                hash = md5obj.hexdigest()
                return hash
        except Exception,ex:
            print "Error:" + str(ex)
            return None
    
    #遍历目录下的所有文件
    def GetAllSubFiles():
        global global_FilesList
        for dir in os.walk(global_DirNew):
            for file in dir[2]:
                filePath = dir[0] + os.sep + file
                global_FilesList.append(filePath[len(global_DirNew)+1:])
    
    #列出新增文件和变动的文件
    def ListChangedFiles():
        global global_DirOld,global_DirNew,global_FilesList
        print u"变动或新增的文件:"
        for file in global_FilesList:
            filePathOld = global_DirOld + os.sep + file
            filePathNew = global_DirNew + os.sep + file
            if not os.path.exists(filePathOld) or CalcMD5(filePathOld)!=CalcMD5(filePathNew):
                content = "[" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+ "]" + filePathNew
                print content
                SaveToFile("ChangedFiles.txt",content)
    
    if __name__=="__main__":
        InputDirPath()
        GetAllSubFiles()
        ListChangedFiles()

    脚本执行结果

    作      者:曾是土木人

    新浪微博:http://weibo.com/cstmr

    原文地址:http://www.cnblogs.com/hongfei/p/3769774.html

    展开全文
  • readDataToDic.py源代码如下: #coding=utf8 import csv ''' 该模块的主要功能,是根据已有的csv文件, 通过readDataToDicl函数,把csv中对应的部分, 写入字典中,每个字典当当作一条json数据 ''' class ...
  • 该脚本是为了结合之前的编写的脚本,来实现数据的比对...readDataToDic.py源代码如下: #coding=utf8 import csv ''' 该模块的主要功能,是根据已有的csv文件, 通过readDataToDicl函数,把csv中对应的部分, 写入

    该脚本是为了结合之前的编写的脚本,来实现数据的比对模块,实现数据的自动化!由于数据格式是定死的,该代码只做参考,有什么问题可以私信我!

    CSV的数据格式截图如下:



    readDataToDic.py源代码如下:

    #coding=utf8
    import csv 
    '''
    该模块的主要功能,是根据已有的csv文件,
    通过readDataToDicl函数,把csv中对应的部分,
    写入字典中,每个字典当当作一条json数据
    '''
    class GenExceptData(object):
        def __init__(self):
            try:
                #用来存放json数据的字典
                self.dataDic={}
                #存放csv中读取的数据
                self.mdbuffer=[]
                #打开csv文件,设置读的权限
                csvHand=open("20170510174450.csv","r")
                #创建读取csv文件句柄
                readcsv=csv.reader(csvHand)
                #把csv的数据读取到mdbuffer中
                for row in readcsv:
                        self.mdbuffer.append(row)  
                #把数据穿件为为字典类型的
                self.readDataToDicl()
                #保存文件
            except Exception,e:
                print "Read Excel  error:",e
            finally:
                #关闭csv文件
                csvHand.close()
      
        def readDataToDicl(self):
            try:
                #获取mdbuffer中的元素个数
                rowNumber=len(self.mdbuffer)
                #设置当前行号
                currentrow=1
                #设置json数据的属性值
                propertyJson={}
                #读取列表中的元素      
                for row in range(1,rowNumber):
                    #创建一个临时变量用来存取一次循环的属性键值
                    temp={}
                    #获取列表中一个元素
                    item=self.mdbuffer[row]
                    #获取当前元素,当前元素代表的是每个
                    #事件起始的位置
                    currentItem=self.mdbuffer[currentrow]
                    #获取serviceId并进行解码
                    serviceId= currentItem[2].decode("gbk")
                    #获取属性并进行解码,把解码的值存入propertyName
                    propertyName=item[3].decode("gbk")
                    #获取属性值并进行解码,把解码的值存入propertyValue
                    propertyValue=item[4].decode("gbk")
                    #判断埋点事件与serviceId是否相等
                    if item[0]==currentItem[0] and item[2]==currentItem[2]:
                        #把serviceId方式字典propertyJson中
                        propertyJson["serviceId"]=serviceId 
                        #把属性/值对放入temp字典中                                                 
                        temp[propertyName]=propertyValue
                        #调用字典的update函数,把temp中的键值对
                        #添加到 propertyJson字典中
                        propertyJson.update(temp)
                        #使用continue,如果为if条件为true则循环执行if语句模块
                        continue  
                    else:
                        #把行号设置为当前行
                        currentrow=row  
                        #把当前的属性解码放入propertyName                    
                        propertyName=currentItem[3].decode("gbk")
                        #把当前的属性值解码放入propertyName
                        propertyValue=currentItem[4].decode("gbk")
                        #把serviceId方式字典propertyJson中 
                        propertyJson["serviceId"]=serviceId    
                        #把属性/值对放入propertyJson字典中  
                        propertyJson[propertyName]=propertyValue 
                        #输入字典中的值,并对值进行解码
                        #该部分用于调试使用 
                        for key,val in propertyJson.items():
                            print key,"=",val.encode("utf8")
                        print "#"*50 
                        #为下次做准备,清除字典中的元素
                        propertyJson.clear()
                                 
            except Exception,e:
                print "Reading Data TO Dic Error:",e
            
    def test():
        GenExceptData()
        
    if __name__=="__main__":
        test()

    运行结果图:


    展开全文
  • readDataToDic.py源代码如下: #coding=utf8 import csv ''' 该模块的主要功能,是根据已有的csv文件, 通过readDataToDicl函数,把csv中对应的部分, 写入字典中,每个字典当当作一条json数据 ''' class Ge
  • readDataToDic.py源代码如下: 运行结果图: 以上这篇Python把对应格式的csv文件转换成字典类型存储脚本的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。 ...
  • 第二篇讲解指纹模式识别系统算法,包括指纹模式识别预处理和指纹图像特征提取与比对源代码实现;第三篇讲解如何亲手打造指纹模式识别系统,带领读者制作一个指纹模式识别系统的软硬件系统;第四篇讲解指纹模式识别...
  • Bioanalyzer源代码是通过Python编程语言编写的,该编程语言可减少内存使用量和初始启动时间。 Bioanalyzer是一个免费的开源软件,可以在其中修改,扩展或集成其代码到不同的生物信息学管道中。 生物信息学以FASTA和...
  • 采用LLVM针对源代码混淆 2013年09月-2017年07月 湖南高阳通联信息技术有限公司 IOS开发工程师、Java程序员 负责iOS的app包括:和包商户版、和包客户端、和聚宝、和包刷卡、商户接入和包支付能力项目 ...
  • 每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。 每个控件默认配色和demo对应的配色都非常精美。 超过130个可见控件,6个不可见控件。 部分控件提供多种样式风格选择,多种...
  • 另外,项目的源代码的注释大部分也修改为了英文。 如访问速度不佳,可放在 Gitee 地址:https://gitee.com/SnailClimb/guide-rpc-framework 。如果要提交 issue 或者 pr 的话,请在 Github 提交:...
  • 该算法在本系统中实现了基于景点分数近似度的推荐功能,以下给出数据获取方法代码,具体算法实现请查看CFUtils.cosineSimilarity()方法。 public List<Spots> findRecommendList(String id) { //系统中我将...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

文件比对源代码实现