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 命令行非阻塞输入的小例子
Sep 27 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
Python实现Linux命令xxd -i功能
Mar 06 Python
python函数的5种参数详解
Feb 24 Python
python+opencv实现动态物体识别
Jan 09 Python
python调用百度语音识别api
Aug 30 Python
pycharm运行和调试不显示结果的解决方法
Nov 30 Python
python flask安装和命令详解
Apr 02 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
Python Collatz序列实现过程解析
Oct 12 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
php 购物车的例子
2009/05/04 PHP
php中{}大括号是什么意思
2013/12/01 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
微信小程序开发探究
2016/12/27 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
Python FTP操作类代码分享
2014/05/13 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
python语言的优势是什么
2020/06/17 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
结婚周年感言
2014/02/24 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
青少年法制教育心得体会
2016/01/14 职场文书