Python实现快速大文件比较代码解析


Posted in Python onSeptember 04, 2020

问题

假如,在有两个大文件分别存储了大量的数据,数据其实很简单就是一堆字符串,每行存储一条,如何快速筛选出两个文件的异同之处么,或者如何筛选出两个文件中不同的元素呢?

刚开始我是通过最简单的方法,利用for循环去一个个的判断,时间复杂度为m的n次幂,当然当文件数量级为十万或者百万时,速率简直慢到了极点。

解决方法

利用set()的different(方法)可快速比较,两个set集合的不同之处,也就是对集合进行数学运算

假设:数据1拥有858882条记录,数据2有360029条记录,快速挑选出数据2中而不存在与数据1中的数据

方法:先将两个文件中的数据读入两个list:data1和data2,然后通过:set(data2).difference(set(data1)),获取data2与data1的差集

下面为一个小的demo,可以看到近百万级的数据,比较出差集也就需要1秒左右,效率不是一般的高

import time
t1 = time.time()
data1 = []
for i in open("inDB.txt","r",encoding="utf-8"):
  i = i.strip("\n")
  i = i.lower()
  data1.append(i)
data2 = []
for i in open("data/18年.filename","r",encoding="utf-8"):
  i = i.strip("\n")
  i = i.lower()
  data2.append(i)
newdata = set(data2).difference(set(data1))
t2 = time.time()

print(f"data1 length:\t{len(data1)}")
print(f"data2 length:\t{len(data2)}")
print(f"newdata length:\t{len(newdata)}")
print(f"time use:\t{round(t2 - t1,3)}s")

Python实现快速大文件比较代码解析

list最多可以存放多少条数据呢?

python中list最多可以存放多少条数据呢?

对于这个问题,有个网友调研了python的文档,结果跟计算机的性能相关

64位机器:2^63-1=9223372036854775807
32位机器:2^31-1=2147483647
import sys
print(sys.maxsize)
print(pow(2,63)-1)
9223372036854775807
9223372036854775807

集合set的操作

内置函数 作用
add() 为集合添加元素
clear() 移除集合中的所有元素
copy() 拷贝一个集合
difference() 返回多个集合的差集
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
discard() 删除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集。
isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() 判断指定集合是否为该方法参数集合的子集。
issuperset() 判断该方法的参数集合是否为指定集合的子集
pop() 随机移除元素
remove() 移除指定元素
symmetric_difference() 返回两个集合中不重复的元素集合。
symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union() 返回两个集合的并集
update() 给集合添加元素

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
python遍历数组的方法小结
Apr 30 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
Python面向对象之继承代码详解
Jan 29 Python
python如何实现一个刷网页小程序
Nov 27 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python线程的几种创建方式详解
Aug 29 Python
python、Matlab求定积分的实现
Nov 20 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 Python
基于python实现图片转字符画代码实例
Sep 04 #Python
Python HTMLTestRunner如何下载生成报告
Sep 04 #Python
详解python中的lambda与sorted函数
Sep 04 #Python
如何利用Python动态模拟太阳系运转
Sep 04 #Python
python装饰器三种装饰模式的简单分析
Sep 04 #Python
Django如何实现密码错误报错提醒
Sep 04 #Python
如何使用python socket模块实现简单的文件下载
Sep 04 #Python
You might like
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
jQuery 使用手册(二)
2009/09/23 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
Python设计模式之命令模式简单示例
2018/01/10 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
python web框架 django wsgi原理解析
2019/08/20 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
一些Solaris面试题
2015/12/22 面试题
儿子婚宴答谢词
2014/01/09 职场文书
入学证明
2015/06/23 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
python b站视频下载的五种版本
2021/05/27 Python
Java8中Stream的一些神操作
2021/11/02 Java/Android