1. #!/user/bin/python
  2. #!coding=utf-8
  3. # -*- coding: utf-8 -*-
  4. # 2017-9-25
  5. #author:jingwenshuai
  6. import sys
  7. import difflib
  8. import re
  9. import os
  10.  
  11. #--------------------------------比对两文件,将结果存入Result.html-------------------------------------------#
  12.  
  13. # 读取配置文件函数
  14. def read_file(file_name):
  15. try:
  16. file_handle = open(file_name, 'r')
  17. text = file_handle.read().splitlines() # 读取后以行进行分割
  18. file_handle.close()
  19. return text
  20. except IOError as error:
  21. print 'Read file Error: {0}'.format(error)
  22. sys.exit()
  23.  
  24. # 比较两个文件并输出html格式的结果
  25. def compare_file(file1_name, file2_name):
  26. if file1_name == "" or file2_name == "":
  27. print '文件路径不能为空:file1_name的路径为:{0}, file2_name的路径为:{1} .'.format(file1_name, file2_name)
  28. sys.exit()
  29. text1_lines = read_file(file1_name)
  30. text2_lines = read_file(file2_name)
  31. diff = difflib.HtmlDiff() # 创建htmldiff 对象
  32. result = diff.make_file(text1_lines,text2_lines) # 通过make_file 方法输出 html 格式的对比结果
  33. # 将结果保存到result.html文件中并打开
  34. try:
  35. with open('result.html', 'w') as result_file: #同 f = open('result.html', 'w') 打开或创建一个result.html文件
  36. result_file.write(result) #同 f.write(result)
  37. except IOError as error:
  38. print '写入html文件错误:{0}'.format(error)
  39.  
  40. #------------------------------------取出不同部分存入Result.txt-------------------------------------------#
  41.  
  42. #取出不同部分存入Result.txt
  43. def result(file1_name,file2_name):
  44. if file1_name == "" or file2_name == "":
  45. print '文件路径不能为空:file1_name的路径为:{0}, file2_name的路径为:{1} .'.format(file1_name, file2_name)
  46. sys.exit()
  47. str1=[]
  48. str2=[]
  49. str_dump=[]
  50. #将A.txt的内容逐行读到str1中
  51. with open(file1_name,'r') as fa: #相当于fa=open(file1_name,'r')
  52. for line in fa.readlines():
  53. str1.append(line.replace("\n",'')) #line.replace("\n",'') 去掉换行符\n
  54. #将B.txt中的内容逐行读到str2中
  55. with open(file2_name,'r') as fb:
  56. for line in fb.readlines():
  57. str2.append(line.replace("\n",''))
  58.  
  59. #将两个文件中重复的行,添加到str_dump中
  60. for i in str1:
  61. if i in str2:
  62. str_dump.append(i)
  63.  
  64. #将两个文件的行合并,并去重
  65. str_all=set(str1+str2)
  66.  
  67. #将重复的行,在去重的合并行中,remove掉,剩下的就是不重复的行了
  68. for i in str_dump:
  69. if i in str_all:
  70. str_all.remove(i)
  71. #写入文件中
  72. with open("Result.txt",'w+') as fc:
  73. for i in list(str_all):
  74. fc.write(i+'\n')
  75. fa.close()
  76. fb.close()
  77. fc.close()
  78.  
  79. if __name__ == "__main__":
  80. x = raw_input(u"请输入第一个文件路径:")
  81. y = raw_input(u"请输入第二个文件路径:")
  82. compare_file(x, y) #传入两文件的路径
  83. result(x,y) #传入两文件的路径

python文件处理(对比和筛选)的更多相关文章

  1. 利用python进行坐标提取以及筛选(文件操作的小应用)

    由于目前暂时还未学习到python关于数据处理的模块方面的知识,且刚好最近朋友发来一份坐标数据文件(txt格式),让我帮他对其进行筛选, 因此利用了最近刚学过的python文件处理操作以及以前所学的基 ...

  2. 【Python文件处理】递归批处理文件夹子目录内所有txt数据

    因为有个需求,需要处理文件夹内所有txt文件,将txt里面的数据筛选,重新存储. 虽然手工可以做,但想到了python一直主张的是自动化测试,就想试着写一个自动化处理数据的程序. 一.分析数据格式 需 ...

  3. python文件和文件夹訪问File and Directory Access

    http://blog.csdn.net/pipisorry/article/details/47907589 os.path - Common pathname manipulations 都是和路 ...

  4. Go/Python/Erlang编程语言对比分析及示例

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴 ...

  5. python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)

    一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...

  6. 编译Python文件(了解)

    目录 编译Python文件(了解) 批量生成.pyc文件(了解) 编译Python文件(了解) 为了提高加载模块的速度,强调强调强调:提高的是加载速度而绝非运行速度.python解释器会在__pyca ...

  7. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  8. Python文件和数据格式化(教程)

    文件是一个存储在副主存储器的数据序列,可包含任何数据内容. 概念上,文件是数据的集合和抽象,类似的,函数是程序的集合和抽象. 用文件形式组织和表达数据更有效也更加灵活. 文件包括两种形式,文本文件和二 ...

  9. 编译Python文件

    编译Python文件 一.编译Python文件 为了提高加载模块的速度,强调强调强调:提高的是加载速度而绝非运行速度.python解释器会在__pycache__目录中下缓存每个模块编译后的版本,格式 ...

  10. Linux下Python 文件内容替换脚本

    Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...

随机推荐

  1. Java高级【Junit、反射、注解】

    1.Junit单元测试 * 测试分类:     1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值.     2. 白盒测试:需要写代码的.关注程序具体的执行流程. * Junit使用 ...

  2. JVM学习笔记(三):JVM基本参数

    1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第三章 本文是第三章的一些笔记整理. 2 GC日志:-Xlog:gc 要打印GC日志的话,可以加上-Xlog: ...

  3. Workerman:PHP的socket框架

    hi,我们今天来讲讲Workerman,什么是Workerman呢? 看看官网上的介绍 Workerman是一款开源高性能异步PHP socket框架.支持高并发,超高稳定性,被广泛的用于手机app. ...

  4. Jenkins 分布式和并发构建

    1. 分布式构建 1.1 添加 linux 节点 1.2 添加 windows 节点 2. 并发构建 2.1 原理 2.2 示例:分别用 chrome/IE/Firefox 并行测试 1. 分布式构建 ...

  5. UT之最后一测

    经过前面几次文章的分享的UT的相关知识,今天接着分享UT相关最后一测文章,希望对大家在UT的学习中有一点点的帮助. Spring集成测试 有时候我们需要在跑起来的Spring环境中验证,Spring ...

  6. Ionic5路由跳转传值复用

    1. 路由技术 ( 详细记录 ) 是笔记不是博文,觉得写的不够详细的可以使用Ctrl + W组合键 路由跳转页面 1. HTML 中使用 routerLink 属性路由进行跳转,传值时使用 query ...

  7. G - Number Transformation(BFS+素数)

    In this problem, you are given an integer number s. You can transform any integer number A to anothe ...

  8. jq 获取表单全部数据

    jQuery Ajax 操作函数: serialize(): 将表单内容序列化为字符串 serializeArray():序列化表单元素,返回JASON数据 语法: $(selector).seria ...

  9. hdu5247找连续数(打表)

    题意(中问题直接粘题意吧)                                 找连续数 Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否 ...

  10. 如何绕过WAF

    目录 HTTP报文包体的解析 Transfer-Encoding Charset 溢量数据 HTTP协议兼容性 HTTP请求行种的空格 HTTP 0.9+Pipelining Websocket.HT ...