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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
python flask安装和命令详解
Apr 02 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Python网页解析器使用实例详解
May 30 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
Django vue前后端分离整合过程解析
Nov 20 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/07/22 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
一个网马的tips实现分析
2010/11/28 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
python中sleep函数用法实例分析
2015/04/29 Python
Python字符串切片操作知识详解
2016/03/28 Python
python实现周期方波信号频谱图
2018/07/21 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
医院护理人员的自我评价分享
2013/10/04 职场文书
音乐系毕业生自荐信
2013/10/27 职场文书
生产管理的三大手法
2013/11/11 职场文书
农村婚礼证婚词
2014/01/08 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
优秀教师单行材料
2014/12/16 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
公司管理建议书
2015/09/14 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫