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 相关文章推荐
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
python实现web方式logview的方法
Aug 10 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
pyQT5 实现窗体之间传值的示例
Jun 20 Python
Python安装OpenCV的示例代码
Mar 05 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
python 读取串口数据的示例
Nov 09 Python
flask框架中的cookie和session使用
Jan 31 Python
Python+tkinter实现高清图片保存
Mar 13 Python
python使用shell脚本创建kafka连接器
Apr 29 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
深入解析Python中的变量和赋值运算符
2015/10/12 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
电话营销开场白
2015/05/29 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
科普 | 业余无线电知识-波段篇
2022/02/18 无线电