0x00 问题

假如,在有两个大文件分别存储了大量的数据,数据其实很简单就是一堆字符串,每行存储一条,如何快速筛选出两个文件的异同之处么,或者如何筛选出两个文件中不同的元素呢?

刚开始我是通过最简单的方法,利用for循环去一个个的判断,时间复杂度为m的n次幂,当然当文件数量级为十万或者百万时,速率简直慢到了极点。

0x01 解决方法

利用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")

0x02 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
参考:https://blog.csdn.net/TracelessLe/article/details/107281279

0x03 集合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 快速比较大文件的元素异同之处的更多相关文章

  1. Python逐块读取大文件行数的代码 - 为程序员服务

    Python逐块读取大文件行数的代码 - 为程序员服务 python数文件行数最简单的方法是使用enumerate方法,但是如果文件很大的话,这个方法就有点慢了,我们可以逐块的读取文件的内容,然后按块 ...

  2. 使用dd命令快速生成大文件或者小文件的方法

    使用dd命令快速生成大文件或者小文件的方法     转载请说明出处:http://blog.csdn.net/cywosp/article/details/9674757     在程序的测试中有些场 ...

  3. Java快速读取大文件

    Java快速读取大文件 最近公司服务器监控系统需要做一个东西来分析Java应用程序的日志. 第一步探索: 首先我想到的是使用RandomAccessFile,因为他可以很方便的去获取和设置文件指针,下 ...

  4. C++快速读取大文件

    debug的时候需要等很长时间读模型,查资料发现了两种快速读取大文件的方法. test 1:每次读一个字符串 test 2.3一次读取整个文件 {//test 1 string buf; clock_ ...

  5. PHP几个快速读取大文件例子

    PHP几个快速读取大文件例子 感谢 把我给崩了 的投递 时间:2014-10-16 来源:三联 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents ...

  6. 使用dd命令快速生成大文件或者小文件

    使用dd命令快速生成大文件或者小文件 需求场景: 在程序的测试中有些场景需要大量的小文件或者几个比较大的文件,而在我们的文件系统里一时无法找到那么多或者那么大的文件,此时linux的dd命令就能快速的 ...

  7. python 小程序大文件的拆分合并

    1. 将大文件拆分为小文件 I 通过二进制的方式将大文件读取出来,将其拆分存,以不同的文件方式存放在一个目录下面 II 提供两种操作方式交互式和命令行模式 #! usr/bin/python # -* ...

  8. python处理分隔大文件

    4个.sql格式的文件,2G大小,直接插入mysql数据中,文件太大了,导入不进去. 太大的文件用python处理也很麻烦,处理不了,只能先分隔成小文件处理. 文件中数据格式:其中values里面的数 ...

  9. python里如何计算大文件的md5

    在python3中,有了一个hashlib,可以用来计算md5,这里先给出一个简单的例子: import hashlib sstr="i love hanyu" print(has ...

  10. Python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_97 最近无论是面试还是笔试,有一个高频问题始终阴魂不散,那就是给一个大文件,至少超过10g,在内存有限的情况下(低于2g),该以什 ...

随机推荐

  1. 【Python】之pip安装第三方库失败

    一直报错:Could not fetch URL https://pypi.org/simple/pygame/: There was a problem confirming the ssl cer ...

  2. Pandas从入门到放弃

    公众号本文地址:https://mp.weixin.qq.com/s/mSkA5KvL1390Js8_1ZBiyw Pandas简介 Pandas是Panel data(面板数据)和Data anal ...

  3. 小tips:vue结合百度UEditor富文本编辑器实现vue-ueditor-wrap

    1.下载vue-ueditor-wrap cnpm i vue-ueditor-wrap -S 下载最新的 UEditor 资源文件放入你项目的静态资源目录中(比如 static 或者 public, ...

  4. 免费在线OCR识别工具TextIn Tools,开启智能学习新时代

    传统的学习方式,笔记必须手写摘抄:带字照片只能插入文档:PDF转换要花钱买会员-- 而在线OCR识别工具tools.textin.com,既好用又免费,它不仅仅具有文字和表格识别工具,还包含PDF转文 ...

  5. 神经网络之卷积篇:详解为什么使用卷积?(Why convolutions?)

    详解为什么使用卷积? 来分析一下卷积在神经网络中如此受用的原因,然后对如何整合这些卷积,如何通过一个标注过的训练集训练卷积神经网络做个简单概括.和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀 ...

  6. C++20中对于并发方面的进步

    在当今的编程世界中,并发处理能力变得越来越重要.C++20 在并发方面带来了一些进步,使开发者能够更高效.更安全地编写多线程应用程序.这些进步主要包括: 作用域线程(Scoped Threads) 停 ...

  7. AndroidQ 打通应用层到HAL层---(HIDL服务实现)

    什么是HIDL HIDL 全称为HAL interface definition language(发音为"hide-l")是用于指定 HAL 和其用户之间的接口的一种接口描述语言 ...

  8. Vue3的生命周期函数

        选项式 API 组合式API beforeCreate 不需要 created  不需要 beforeMount onBeforeMount mounted onMounted beforeU ...

  9. 谈一谈 vuex 的运行机制

    Vuex提供数据(state)来驱动视图(vue components),通过dispath派发actions,在其中可以做一些异步的操作,然后通过commit来提交mutations,最后mutat ...

  10. 云原生爱好者周刊:Cilium 放大招,发布服务网格 Beta 版

    云原生一周动态要闻: Cilium 推出服务网格测试计划 Knative 已申请成为 CNCF 的孵化项目 Kubernetes v1.23 即将发布 Lens 5.3 发布 开源项目推荐 文章推荐 ...