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 随机数生成的代码的详细分析
May 15 Python
Web服务器框架 Tornado简介
Jul 16 Python
Python迭代用法实例教程
Sep 08 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
python实现俄罗斯方块
Jun 26 Python
Python多线程原理与用法详解
Aug 20 Python
python实现合并两个排序的链表
Mar 03 Python
Python3模拟登录操作实例分析
Mar 12 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
Pycharm Git 设置方法
Sep 15 Python
python调用有道智云API实现文件批量翻译
Oct 10 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
十个Python程序员易犯的错误
2015/12/15 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
python 为什么说eval要慎用
2019/03/26 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
施工材料员岗位职责
2014/02/12 职场文书
买房委托公证书
2014/04/08 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
小学作文之描写天气
2019/08/15 职场文书