zoukankan      html  css  js  c++  java
  • python文件处理(对比和筛选)

    #!/user/bin/python
    #!coding=utf-8
    # -*- coding: utf-8 -*-
    # 2017-9-25
    #author:jingwenshuai
    import sys
    import difflib
    import re
    import os
    
    
    #--------------------------------比对两文件,将结果存入Result.html-------------------------------------------#
    
    # 读取配置文件函数
    def read_file(file_name):
        try:
            file_handle = open(file_name, 'r')
            text = file_handle.read().splitlines()         # 读取后以行进行分割
            file_handle.close()
            return text
        except IOError as error:
            print 'Read file Error: {0}'.format(error)
            sys.exit()
    
    
    # 比较两个文件并输出html格式的结果
    def compare_file(file1_name, file2_name):
        if file1_name == "" or file2_name == "":
            print '文件路径不能为空:file1_name的路径为:{0}, file2_name的路径为:{1} .'.format(file1_name, file2_name)
            sys.exit()
        text1_lines = read_file(file1_name)
        text2_lines = read_file(file2_name)
        diff = difflib.HtmlDiff()                             # 创建htmldiff 对象
        result = diff.make_file(text1_lines,text2_lines)     # 通过make_file 方法输出 html 格式的对比结果
        #  将结果保存到result.html文件中并打开
        try:
            with open('result.html', 'w') as result_file:     #同 f = open('result.html', 'w') 打开或创建一个result.html文件
                result_file.write(result)                     #同 f.write(result)
        except IOError as error:
            print '写入html文件错误:{0}'.format(error)
    
    
    #------------------------------------取出不同部分存入Result.txt-------------------------------------------#
    
    #取出不同部分存入Result.txt
    def result(file1_name,file2_name):
        if file1_name == "" or file2_name == "":
            print '文件路径不能为空:file1_name的路径为:{0}, file2_name的路径为:{1} .'.format(file1_name, file2_name)
            sys.exit()
        str1=[]
        str2=[]
        str_dump=[]
        #将A.txt的内容逐行读到str1中
        with open(file1_name,'r') as fa:                #相当于fa=open(file1_name,'r')
            for line in fa.readlines():
                str1.append(line.replace("
    ",''))      #line.replace("
    ",'') 去掉换行符
    
        #将B.txt中的内容逐行读到str2中
        with open(file2_name,'r') as fb:
            for line in fb.readlines():
                str2.append(line.replace("
    ",''))
         
        #将两个文件中重复的行,添加到str_dump中
        for i in str1:
            if i in str2:
                str_dump.append(i)
         
        #将两个文件的行合并,并去重
        str_all=set(str1+str2)
         
        #将重复的行,在去重的合并行中,remove掉,剩下的就是不重复的行了
        for i in str_dump:
            if i in str_all:
                str_all.remove(i)
        #写入文件中
        with open("Result.txt",'w+') as fc:
            for i in list(str_all):
                fc.write(i+'
    ')
        fa.close()
        fb.close()
        fc.close()
    
    
    if __name__ == "__main__":
        x = raw_input(u"请输入第一个文件路径:")
        y = raw_input(u"请输入第二个文件路径:")
        compare_file(x, y)    #传入两文件的路径
        result(x,y)    #传入两文件的路径
  • 相关阅读:
    C# Use Pop3Client to read gmail
    在c#程式中配置log4net
    修改windows系統下xampp中apache端口被其他程式占用的問題
    关于知识总结的个人体验与见解
    html 元素水平居中方式
    JS setInterval 函数调用
    HTML特殊字符、列表、表格总结
    UISegmentedControl的详细使用
    IOS研究之iOS7适配的使用详细说明
    uibutton设置
  • 原文地址:https://www.cnblogs.com/yizhipanghu/p/9701059.html
Copyright © 2011-2022 走看看