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 24 Python
python使用any判断一个对象是否为空的方法
Nov 19 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
Python日志syslog使用原理详解
Feb 18 Python
如何搭建pytorch环境的方法步骤
May 06 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python如何编写win程序
Jun 08 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上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
python奇偶行分开存储实现代码
2018/03/19 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
澳大利亚家具商店:Freedom
2020/12/17 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
办公室卫生管理制度
2015/08/04 职场文书