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 相关文章推荐
tornado框架blog模块分析与使用
Nov 21 Python
基于python编写的微博应用
Oct 17 Python
Python简明入门教程
Aug 04 Python
Python有序字典简单实现方法示例
Sep 28 Python
python操作excel的方法
Aug 16 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
linux中如何使用python3获取ip地址
Jul 15 Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 Python
python 循环数据赋值实例
Dec 02 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
Mar 10 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 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 日志缩略名的创建函数代码
2010/05/26 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
在python下读取并展示raw格式的图片实例
2019/01/24 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
Python中base64与xml取值结合问题
2019/12/22 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
浅析Python迭代器的高级用法
2020/07/16 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
入党思想汇报
2014/01/05 职场文书
大学生村官典型材料
2014/01/12 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
某某同志考察材料
2014/05/28 职场文书
公证委托书
2014/08/01 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
公路施工安全责任书
2015/05/08 职场文书
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS