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读文件逐行处理的示例代码分享
Dec 27 Python
Python中字符串的格式化方法小结
May 03 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
Python中__init__.py文件的作用详解
Sep 18 Python
python 检查文件mime类型的方法
Dec 08 Python
PyQt5响应回车事件的方法
Jun 25 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
基于python实现获取网页图片过程解析
May 11 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
教你怎么用Python实现多路径迷宫
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脚本的10个技巧(5)
2006/10/09 PHP
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
Js 中debug方式
2010/02/07 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
用python实现名片管理系统
2020/06/18 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
Html5新标签解释及用法
2012/02/17 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
读书月活动方案
2014/05/22 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
学术会议开幕词
2016/03/03 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis