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中使用smtplib和email模块发送邮件实例
Apr 22 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
python如何生成各种随机分布图
Aug 27 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
win10安装python3.6的常见问题
Jul 01 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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
做个自己站内搜索引擎
2006/10/09 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
如何将python中的List转化成dictionary
2016/08/15 Python
Python学习思维导图(必看篇)
2017/06/26 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
俄罗斯韩国化妆品网上商店:Cosmasi.ru
2019/10/31 全球购物
专升本个人自我评价
2013/12/22 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
纠纷协议书
2014/04/16 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
工作鉴定评语
2014/05/04 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
2015年个人工作总结报告
2015/04/25 职场文书