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实现从url中提取域名的几种方法
Sep 26 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
python3使用matplotlib绘制散点图
Mar 19 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 Python
Django中的AutoField字段使用
May 18 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原理之Session Gc的一个小概率Notice
2011/04/12 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
php处理复杂xml数据示例
2016/07/11 PHP
php二维码生成以及下载实现
2017/09/28 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
JS实现秒杀倒计时特效
2020/01/02 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
python assert的用处示例详解
2019/04/01 Python
Python中请不要再用re.compile了
2019/06/30 Python
python二进制文件的转译详解
2019/07/03 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
序列化Python对象的方法
2020/08/01 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
Python图像处理库PIL详细使用说明
2022/04/06 Python