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 相关文章推荐
Python3实现从指定路径查找文件的方法
May 22 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
May 25 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python自动化之Ansible的安装教程
Jun 13 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
Django ORM 查询管理器源码解析
Aug 05 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
python3.x中安装web.py步骤方法
Jun 23 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 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+mysql留言本源码
2009/11/11 PHP
PHP header函数分析详解
2011/08/06 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
js实现日历与定时器
2017/02/22 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
Vue页面骨架屏的实现方法
2018/05/22 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
跟老齐学Python之list和str比较
2014/09/20 Python
在Python的web框架中配置app的教程
2015/04/30 Python
让Python代码更快运行的5种方法
2015/06/21 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Numpy数组的保存与读取方法
2018/04/04 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
Python logging模块原理解析及应用
2020/08/13 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
机票销售员态度不好检讨书
2014/09/27 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL