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之总结参数的传递
Oct 10 Python
Python交互环境下实现输入代码
Jun 22 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
使用Scrapy爬取动态数据
Oct 21 Python
python+flask实现API的方法
Nov 21 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
Python短信轰炸的代码
Mar 25 Python
ipython jupyter notebook中显示图像和数学公式实例
Apr 15 Python
python实现二分查找算法
Sep 18 Python
python实现录音功能(可随时停止录音)
Oct 26 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 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 ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
浅谈PDF.js使用心得
2018/06/07 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
python实现百度关键词排名查询
2014/03/30 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
python def 定义函数,调用函数方式
2020/06/02 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
金融事务专业求职信
2014/04/25 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
自主招生英文自荐信
2015/03/25 职场文书
《七律·长征》教学反思
2016/02/16 职场文书