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 相关文章推荐
python转换摩斯密码示例
Feb 16 Python
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
Python标准库之collections包的使用教程
Apr 27 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
python模拟事件触发机制详解
Jan 19 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
python def 定义函数,调用函数方式
Jun 02 Python
python实现求纯色彩图像的边框
Apr 08 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
PHP中替换换行符的几种方法小结
2012/10/15 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
AngularJS 应用模块化的使用
2018/04/04 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Django中Middleware中的函数详解
2019/07/18 Python
使用python实现画AR模型时序图
2019/11/20 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
大学生活学习的自我评价
2013/12/03 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
2015年科协工作总结
2015/05/19 职场文书
给学校的建议书400字
2015/09/14 职场文书