python筛选出两个文件中重复行的方法


Posted in Python onMay 31, 2018

本文实例为大家分享了python脚本筛选出两个文件中重复的行数,供大家参考,具体内容如下

'''
查找A文件中,与B文件中内容不重复的内容
'''
#!usr/bin/python

import sys
import os

'''
字符串查找函数,使用二分查找法在列表中进行查询
'''
def binarySearch(value, lines):
  right = len(lines) - 1
  left = 0
  a = value.strip()
  while left <= right:
    middle = int((right + left + 1)/2)
    b = lines[middle].strip()
    if a == b:
      return 1

    if a < b:
      right = middle - 1
    else:
      left = middle + 1

  return 0

DPT = 100000 # DPT 是Data Per File的意思

fileAName = sys.argv[1];
fileBName = sys.argv[2];

#STEP1:先拆掉B文件,作为比较基准,临时文件命名为temp1,temp2,...,tempN
print("拆分比对文件...\n")
fB = open(fileBName)
tempFileNo = 1
tempFileName = "temp{0}".format(tempFileNo)
fTemp = open(tempFileName, "w+")
line = fB.readline()
lineCount = 0
while line:
  if lineCount >= DPT:
    fTemp.flush()
    fTemp.close()
    tempFileNo = tempFileNo + 1
    tempFileName = "temp{0}".format(tempFileNo)
    fTemp = open(tempFileName, "w+")
    lineCount = 0
  fTemp.write(line)
  lineCount = lineCount + 1
  line = fB.readline()  

fTemp.flush()
fTemp.close()

fB.close()
print("拆分完成,一共{0}个临时文件,{1}条数据。\n".format(tempFileNo, (tempFileNo-1)*DPT + lineCount))

#STEP2:把A文件与B文件拆出来的临时文件逐个进行比较,将结果轮流写入文件result0, result1
#    最后写入的result文件就是最终结果
fA = open(fileAName)
resultTempFile = {"result0", "result1"};
tempIndex = 0
fOut = open("repeat", "w+")
repeatCount = 0
for i in range(1, tempFileNo + 1):
  print("比较第{0}个临时文件...\n".format(i))
  if 0 == tempIndex:
    resultTempFile = "result0"   
    tempIndex = 1
  else:
    resultTempFile = "result1"
    tempIndex = 0
  fResult = open(resultTempFile, "w+")

  fTemp = open("temp{0}".format(i))
  lineSet = fTemp.readlines()
  fTemp.close()
  lineList = list(lineSet)
  lineList.sort()

  line = fA.readline()
  while line:
    if 0 == binarySearch(line, lineList):
      fResult.write(line)
    else:
      fOut.write(line)
      repeatCount = repeatCount + 1
    line = fA.readline()
  fA.close()

  fResult.flush()
  fResult.close()

  fA = open(resultTempFile)

fA.close()
fOut.flush()
fOut.close()

print("比较完成,重复数据{0}条".format(repeatCount))

os.rename(resultTempFile, "result")

#STEP3:结束后把临时文件都删掉
print("删除临时文件...\n")
while tempFileNo > 0:
  tempFileName = "temp{0}".format(tempFileNo)
  os.remove(tempFileName)
  tempFileNo = tempFileNo - 1

print("脚本结束。\n")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
动态创建类实例代码
Oct 07 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
Python中int()函数的用法浅析
Oct 17 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
Python语言实现将图片转化为html页面
Dec 06 Python
详解Django 中是否使用时区的区别
Jun 14 Python
python机器学习之神经网络实现
Oct 13 Python
python解释器spython使用及原理解析
Aug 24 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
python实现定时发送邮件
Dec 23 Python
Pytorch 实现变量类型转换
May 17 Python
python删除文本中行数标签的方法
May 31 #Python
Python使用wget实现下载网络文件功能示例
May 31 #Python
Python使用progressbar模块实现的显示进度条功能
May 31 #Python
python调用Matplotlib绘制分布点并且添加标签
May 31 #Python
python批量修改文件编码格式的方法
May 31 #Python
Python用for循环实现九九乘法表
May 31 #Python
python实现txt文件格式转换为arff格式
May 31 #Python
You might like
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
基于javascript实现页面加载loading效果
2020/09/15 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Python文件读写常见用法总结
2019/02/22 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
这段代码难道不该打印出56吗
2013/02/27 面试题
解释一下Windows的消息机制
2014/01/30 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
高中自我鉴定
2013/12/20 职场文书
国家励志奖学金获奖感言
2014/01/09 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python