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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
Python文件操作类操作实例详解
Jul 11 Python
Python 26进制计算实现方法
May 28 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
详解Python之unittest单元测试代码
Jan 24 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
使用pandas读取文件的实现
Jul 31 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
python 实现简易的记事本
Nov 30 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/11/01 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
javascript控制台详解
2015/06/25 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
python内存管理分析
2015/04/08 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
Python中list初始化方法示例
2016/09/18 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
python的命名规则知识点总结
2019/10/04 Python
python yield关键词案例测试
2019/10/15 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
行政人员工作职责
2013/12/05 职场文书
办公室人员先进事迹
2014/01/27 职场文书
项目建议书模板
2014/05/12 职场文书
简历自我评价优缺点
2015/03/11 职场文书
甲午风云观后感
2015/06/02 职场文书
Python实现日志实时监测的示例详解
2022/04/06 Python
Java设计模式之代理模式
2022/04/22 Java/Android