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同时向控制台和文件输出日志logging的方法
May 26 Python
python中input()与raw_input()的区别分析
Feb 27 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Python selenium根据class定位页面元素的方法
Feb 26 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
Python识别html主要文本框过程解析
Feb 18 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
Python tkinter实现简单加法计算器代码实例
May 13 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 动态添加记录
2009/03/10 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
javascript 写类方式之二
2009/07/05 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
领导班子三严三实对照检查材料
2014/09/25 职场文书
毕业证代领委托书
2014/09/26 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书