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 相关文章推荐
Python删除指定目录下过期文件的2个脚本分享
Apr 10 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Python正则表达式指南 推荐
Oct 09 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
Python flask框架post接口调用示例
Jul 03 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
Django之PopUp的具体实现方法
Aug 31 Python
python创建子类的方法分析
Nov 28 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
哪些是python中web开发框架
Jun 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
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python socket编程实例详解
2015/05/27 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
Django之腾讯云短信的实现
2020/06/12 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
招商引资工作汇报
2014/10/28 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
入学证明
2015/06/23 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
感谢信
2019/04/11 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers