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转换HTML到Text纯文本的方法
Jan 15 Python
Python的Flask框架中@app.route的用法教程
Mar 31 Python
Python实现以时间换空间的缓存替换算法
Feb 19 Python
python ansible服务及剧本编写
Dec 29 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
Python爬虫requests库多种用法实例
May 28 Python
使用python爬取抖音app视频的实例代码
Dec 01 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
生成sessionid和随机密码的例子
2006/10/09 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
详解Flask前后端分离项目案例
2020/07/24 Python
python实现取余操作的简单实例
2020/08/16 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
外贸业务员求职信
2014/06/16 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
综治目标管理责任书
2015/05/11 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle