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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
python实现域名系统(DNS)正向查询的方法
Apr 19 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
Python理解递归的方法总结
Jan 28 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
Python使用openpyxl复制整张sheet
Mar 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
Dedecms常用函数解析
2008/02/01 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
jQuery select控制插件
2009/08/17 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
通过实例了解python property属性
2019/11/01 Python
台湾家适得:Homeget
2019/02/11 全球购物
轻化专业学生实习自我鉴定
2013/09/20 职场文书
报社实习生自荐信
2014/01/24 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
家属慰问信
2015/02/14 职场文书
公司表扬信格式
2015/05/04 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
趣味运动会标语口号
2015/12/26 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
golang的文件创建及读写操作
2022/04/14 Golang