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 Tkinter基础控件用法
Sep 03 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
python logging日志模块的详解
Oct 29 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
Python切片操作深入详解
Jul 27 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
Python定义一个函数的方法
Jun 15 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
python 绘制正态曲线的示例
Sep 24 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查看SSL证书信息的方法
2016/09/22 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
vue实现数据控制视图的原理解析
2020/01/07 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
python中cPickle用法例子分享
2014/01/03 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
python 内置函数汇总详解
2019/09/16 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
python获取栅格点和面值的实现
2020/03/10 Python
python 连续不等式语法糖实例
2020/04/15 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
写好求职信第一句话的技巧
2013/10/26 职场文书
《社戏》教学反思
2014/04/15 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python