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目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
35个Python编程小技巧
Apr 01 Python
Python统计日志中每个IP出现次数的方法
Jul 06 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
python计算auc指标实例
Jul 13 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
Python内置random模块生成随机数的方法
May 31 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
pytorch中的weight-initilzation用法
Jun 24 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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 microtime获取浮点的时间戳
2010/02/21 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP中header用法小结
2016/05/23 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python实现飞机大战
2018/09/11 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
python3.7 的新特性详解
2019/07/25 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
浅谈HTML5 & CSS3的新交互特性
2016/07/19 HTML / CSS
港湾网络笔试题
2014/04/19 面试题
幼儿教师国培感言
2014/02/19 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
导游词之日本富士山
2020/01/06 职场文书
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL