场景:对比两个txt文件的差异,将对比结果写入html,将不同部分写入另一个txt

#!/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 = result.replace('ISO-8859-1','gbk') #字符串替换,将result的编码替换为gbk
# 将结果保存到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("\n",'')) #line.replace("\n",'') 去掉换行符\n
#将B.txt中的内容逐行读到str2中
with open(file2_name,'r') as fb:
for line in fb.readlines():
str2.append(line.replace("\n",'')) #将两个文件中重复的行,添加到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) #将str1中重复的去掉
for i in str_dump:
if i in str1:
str1.remove(i) #将str2中重复的去掉
for i in str_dump:
if i in str2:
str2.remove(i) #将两个不同的行合并到一行
str_all = []
for i in range(len(str2)):
str_all.append(str1[i] + ' '+ str2[i]) #写入文件中
with open("Result.txt",'w+') as fc:
for i in list(str_all):
fc.write(i+'\n')
fa.close()
fb.close()
fc.close() if __name__ == "__main__":
x = raw_input(u"请输入第一个文件路径:")
y = raw_input(u"请输入第二个文件路径:")
compare_file(x, y) #传入两文件的路径
result(x,y) #传入两文件的路径

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

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

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

  2. 编译Python文件(了解)

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

  3. Python+Excel 操作对比

    前言 从网页爬下来的大量数据需要excel清洗成堆的科学实验数据需要导入excel进行分析作为一名面向逼格的Python程序员该如何合理而又优雅的选择生产力工具呢? 得益于辛勤劳作的python大神们 ...

  4. 编译Python文件

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

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

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

  6. 关于ext3,ext4,xfs和btrfs文件系统性能对比

    关于ext3,ext4,xfs和btrfs文件系统性能对比 应为原文:http://www.ilsistemista.net/index.php/linux-a-unix/6-linux-filesy ...

  7. [C/C++][文件操作] 对比目录并列出同名较新文件、较旧文件 0.1

    主要是模仿robocopy的部分功能 (robocopy /L 参数可以列出本地目录和备份目录中的异同之处,主要是标记出:较新的.较旧的.多出的文件 ) 现在还不会写GUI,打算后面自己做目录树dif ...

  8. python文件打包格式,pip包管理

    1..whl是python文件的一种打包格式, 在有些情况下,可以将文件的后缀名改为.zip并解压 2.cmd中,提示pip版本太低,先升级pip   pip install --upgrade pi ...

  9. Python包管理工具和多版本环境管理

    1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...

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

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

随机推荐

  1. Java8 Map computeIfAbsent方法说明

    // 方法定义 default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) { . ...

  2. prometheus入门介绍及相关组件、原理讲解

    1:介绍 Prometheus 是由 SoundCloud 开源监控告警解决方案. prometheus是由谷歌研发的一款开源的监控软件,目前已经被云计算本地基金会托管,是继k8s托管的第二个项目. ...

  3. Day11_51_Collections工具类之sort方法和list集合的遍历方式

    Collections工具类之sort方法 * 使用Collections工具类对List集合进行排序 Collections.sort(List集合) * Collections.sort()方法只 ...

  4. 753. Cracking the Safe

    There is a box protected by a password. The password is n digits, where each letter can be one of th ...

  5. Kernighan《UNIX 传奇:历史与回忆》杂感

    Brian W. Kernighan 是一个伟大的技术作家,我买了他写的几乎所有书.他近些年的书我买的是 Kindle 电子版,不占地方. 以下是我手上保存的纸版书: Kernighan 的书大多与别 ...

  6. 微信小程序中的自定义组件

    微信小程序中的组件 前言 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 ...

  7. POJ1422 最小路径覆盖

    题意:      一个战场,往战场上投放伞兵,每个伞兵不能后退,只能往前走,问你最少多少个伞兵可以吧所有的点都占领. 思路:      这个题是最小路径覆盖,最小路径覆盖 = n - 最大匹配数,首先 ...

  8. Docker用Dockerfile定制镜像

    用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...

  9. MyBatis Plus 实现多表分页模糊查询

    项目中使用springboot+mybatis-plus来实现. 但是之前处理的时候都是一个功能,比如分页查询,条件查询,模糊查询. 这次将这个几个功能合起来就有点头疼,写下这边博客来记录自己碰到的问 ...

  10. 6 JDBC

    JDBC 理解图 需要mysql包 下载官网:https://downloads.mysql.com/archives/c-j/ 第一个JDBC项目 创建一个java项目,一路next 导入jar包 ...