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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
深入浅析python继承问题
May 29 Python
Python中的变量和作用域详解
Jul 13 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
Python + selenium自动化环境搭建的完整步骤
May 19 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 Python
python实现猜拳小游戏
Apr 05 Python
django 简单实现登录验证给你
Nov 06 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
python3让print输出不换行的方法
Aug 24 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/06/08 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
python Tkinter版学生管理系统
2019/02/20 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
thinkphp5 路由分发原理
2021/03/18 PHP
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
五型班组建设方案
2014/02/10 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
师德师风的心得体会
2014/09/02 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
金陵十三钗观后感
2015/06/04 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
转变工作作风心得体会
2016/01/23 职场文书
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
MySQL新手入门进阶语句汇总
2022/09/23 MySQL